2012-02-21 14 views
51

"C標準ライブラリ"と "C POSIXライブラリ"で定義されている多くのヘッダファイルが見つかりましたので、少し混乱します"C標準ライブラリ"。C標準ライブラリとC POSIXライブラリの相違点

したがって、 "C標準ライブラリ"はANSI C組織によって定義されたライブラリであり、異なるプラットフォーム(Win32/Unix系)で異なる実装があり、 "C POSIX lib"は単なる実装ですUnixのようなOSで "Cの標準lib"のために、右か?

しかし、 "C POSIX lib"には、 "C標準ライブラリ"に指定されていないヘッダーがいくつか含まれています(<sys/types.h>,<sys/wait.h><pthread.h>など)。

例として<pthread.h>を取る、私は私が含まれている必要があり、ヘッダファイルLinux上でマルチスレッドプログラム、<pthread.h>または<threads.h>を書きたい場合は、その「C標準のlib」の相手は、その後、<threads.h>ですね?

+5

ANSI Cは、Cが国際標準となった1990年、以来、時代遅れとなっています。それ以来、Cは[ISOワーキンググループ](http://www.open-std.org/jtc1/sc22/wg14/)によって維持管理されています。 – Lundin

+4

@ Lundin全くナンセンス。 ANSI Cは廃止されました。実際、C11は[INCITS/ISO/IEC 9899-2012](http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012)として知られているANSI標準としてINCITSによって採用されました。これは新しいANSI C標準です。 – Wiz

+0

@Wiz国際標準であり、国際的なサイトです。それを念頭に置いて、1990年以来ANSI Cについて話すのは意味がありません。私はこのサイトのCを「SS C」と呼ぶのと同じです。なぜなら、私はスウェーデンとスウェーデンの標準 – Lundin

答えて

36

POSIXは標準のCライブラリのスーパーセットです。 CとPOSIXが矛盾している場合、Cが勝ちます。

ソケット、ファイルディスクリプタ、共有メモリなどはすべてPOSIXの一部ですが、Cライブラリには存在しません。

pthread.hはPOSIXスレッドに使用され、threads.hはC11の新しいヘッダーであり、Cライブラリの一部です。多分、将来のpthreadの使用は非推奨になりますが、C11にはまだ普及していない可能性があります。したがって、移植性が必要な場合は、今のところpthreadsを好むべきです。移植性が問題ではなく、利用可能なC11スレッドがある場合は、それらを使用するべきでしょう。

+0

たとえば、signal.hはhttp://en.wikipedia.org/wiki/C_standard_libraryとhttp://en.wikipedia.org/wiki/C_POSIX_libraryに記載されています。しかし、私はまだ理解していません。 signal.hは標準的なCライブラリのヘッダか、それともPOSIXシステムでのみ利用可能ですか? –

+1

@KorayTugayそれを理解する最善の方法は、[POSIXウェブページ](http://pubs.opengroup.org/onlinepubs/9699919799)に行き、[signal.h](http:// pubs。 opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html)。ヘッダーはCの標準ライブラリに存在しますが、POSIXにはヘッダがあることに注意してください。拡張は 'CX'でマークされます。定義を追加する必要があると言われていますが、通常、拡張機能はデフォルトのコンパイラフラグによって有効になっています。もう1つの選択肢は[C標準](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)です。 –

+0

私はpthreadがC11スレッドのために推奨されなくなるとは思っていません。特に、C11スレッドはpthreadの適切なサブセットです(重要ではない部分を除いて)。 – fuz

9

C POSIXライブラリは、POSIXシステム用のC標準ライブラリの仕様です。これはANSI C標準と同時に開発されました。 POSIXを標準Cと互換性を持たせるためにいくつかの努力がなされました。 POSIXには、標準Cで導入されたものに追加の機能が含まれています。

3

POSIX 7引用

http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap01.html#tag_14_01

1.1他の公式規格

細心の注意との関係はPOSIX.1-2008のこのボリュームが完全に揃っていることを保証するためにとられています

ISO C(1999) ISO/IEC 9899:1999、Programm ISO/IEC 9899:1999/Cor.1:2001(E)、ISO/IEC 9899:1999/Cor.2:2004(E)、およびISO/IEC 9899:1999/Cor.3を含む、

ISO/IEC 9899:1999規格の部分(以下、ISO C標準と呼ぶ)は、この量のPOSIX.1-2008でも義務付けられている要件を記述するために参照されます。 POSIX.1-2008のこの巻に含まれるいくつかの関数とヘッダーには、ISO C標準のバージョンがあります。この場合、CXマーキングは、ISO C標準がどこで拡張されたかを示すために適宜追加されます(「コード」を参照)。この量のPOSIX.1-2008とISO C標準との間の矛盾は意図的ではありません。

私がいくつかの主要なAPIの拡張をリストした:I never really understood: what is POSIX?

関連する問題