GNU/Linux >> Linux の 問題 >  >> Linux

Linux では time.h で timer_t が定義されているのに、OS X では定義されていないのはなぜですか

Unix と C は絡み合った歴史を持っています。どちらもニュージャージー州の Bell Labs でほぼ同時に開発されたもので、C の主な目的の 1 つは、高レベルでアーキテクチャに依存しない移植可能な言語を使用して Unix を実装することでした。ただし、1983 年まで公式の標準化はありませんでした。POSIX (「ポータブル オペレーティング システム インターフェイス」) は、「Unix 戦争」の時代にさかのぼる IEEE オペレーティング システム標準です。それ以来進化を続け、現在では最も広く実装されている標準となっています。 OSX は正式に POSIX に準拠しており、Linux は非公式に準拠しています。Linux ディストリビューションが参加しない公式準拠に関連するロジスティクスとコストがあります。

POSIX が焦点を当てていることの多くは、ISO C の一部ではないものの精緻化です。Time.h はありますが、ISO バージョンには timer_t が含まれていません。 タイプまたはそれを使用する関数。これらは POSIX 拡張からのものであるため、Linux ヘッダーのこの参照:

#if !defined __timer_t_defined && \
((defined _TIME_H && defined __USE_POSIX199309)

__USE_POSIX199309 _POSIX_C_SOURCE >= 199309L の場合に features.h で設定される内部 glibc シンボルです。 これは、POSIX.1b がサポートされることを意味します (feature_test_macros マンページを参照)。これは _XOPEN_SOURCE >= 600 でもサポートされています .

<ブロック引用>

異なる OS 間で定義が異なる機能や属性はありますか?

Cに関しては、POSIXシステムの中でそれを避ける努力があると思いますが、それは起こります.いくつかの GNU 拡張機能があります (例:sterror_r() ) 対応する POSIX からの互換性のない署名を持っています。おそらくこれは、POSIX が拡張機能を取り上げてそれを変更した場合に発生する可能性があります。または、GNU によって考え出された代替手段にすぎない場合に発生する可能性があります。適切な #define を使用して、どちらかを選択できます。 .


timer_t timer_create() などの POSIX の timer_ API で使用されます。 . UNIX 03 バージョンの POSIX では、これらは POSIX のオプション部分であり、macOS はそれを実装していませんでした。 Linux と Solaris、そしておそらく他のいくつかの UN*Xes はそうしました。

したがって、あなたが見ていたコードは Linux と Solaris では動作するかもしれませんが、Apple が将来タイマー API を実装しない限り、macOS では動作しません。 (これらは POSIX 仕様の現在のバージョンの一部であるため、仕様のバージョン 3 ではなくバージョン 4 に準拠したい場合、Apple はそうする必要があります。)


Linux
  1. Linux – Kali Linuxはインストールされていますが、ブートマネージャーに表示されませんか?

  2. Linux – Uefi / biosで動作するのにUsbがLinuxで動作しないのはなぜですか?

  3. Linux –ユーザースペースを決して壊さないLinuxカーネルポリシーがあるのはなぜですか?

  1. Linux – Linux上のRsyncがすべてのタイムスタンプ(作成時間)を保持しないのはなぜですか?

  2. Linuxは上書きではなくコピーする方法は?

  3. なぜ wine は Linux では 64 ビット プログラムを実行できるのに、Mac では実行できないのですか?

  1. Linux –なぜSuだけでなくSuを使用するのですか?

  2. Linux –システムにRootfsファイルシステムが存在しないのはなぜですか?

  3. UNIX 認定の Linux ディストリビューションはありますか?