Unterschied zwischen C-Standardbibliothek und C-POSIX-Bibliothek

Lesezeit: 5 Minuten

Alcotts Benutzeravatar
Alcott

Ich bin etwas verwirrt von “C Standard Lib” und “C POSIX Lib”, weil ich festgestellt habe, dass viele in “C POSIX Lib” definierte Header-Dateien auch Teil von “C Standard Lib” sind.

Ich gehe also davon aus, dass “C-Standardbibliothek” eine von der ANSI-C-Organisation definierte Bibliothek ist und es auf verschiedenen Plattformen (Win32/Unix-ähnlich) unterschiedliche Implementierungen gibt und “C-POSIX-Bibliothek” nur eine Implementierung für “C-Standard lib” auf Unix-ähnlichen Betriebssystemen, richtig?

Aber “C POSIX lib” enthält einige Header, die nicht in “C Standard Lib” angegeben sind, wie z <sys/types.h>, <sys/wait.h>und <pthread.h>.

Nehmen <pthread.h> Als Beispiel nehme ich an, dass es das Gegenstück “C Standard Lib” ist <threads.h>wenn ich dann ein Multithread-Programm unter Linux schreiben möchte, welche Header-Datei sollte ich einschließen, <pthread.h> oder <threads.h>?

  • ANSI C ist seit 1990 veraltet, als C zu einem internationalen Standard wurde. Seitdem wird C von an gepflegt ISO-Arbeitsgruppe.

    – Ludin

    21. Februar 2012 um 12:12 Uhr

  • @Lundin Völlig Unsinn. ANSI C ist nichts als veraltet. Tatsächlich wurde C11 von INCITS als bekannter ANSI-Standard übernommen INCITS/ISO/IEC 9899-2012 das ist der neue ANSI C-Standard.

    – Wiz

    14. Dezember 2013 um 9:31 Uhr

  • @Wiz Es ist ein internationaler Standard und dies ist eine internationale Site. In Anbetracht dessen macht es seit 1990 keinen Sinn, über ANSI C zu sprechen. Es ist dasselbe, als würde ich C auf dieser Seite als “SS C” bezeichnen, da ich aus Schweden und dem schwedischen Standard komme heißt SS/ISO/IEC 9899.

    – Ludin

    16. Dezember 2013 um 7:38 Uhr

  • @Lundin Während die Leute immer wieder denken, dass “ANSI C” bedeutet, dass C89 es nicht wahr macht; insbesondere als ANSI C 2012 C11 übernahm; wodurch “ANSI C” C11 bedeutet. Egal wie viele Leute denken mögen, dass es nicht so ist.

    – Wiz

    16. Dezember 2013 um 9:09 Uhr


  • @Wiz Du verfehlst den Punkt. Für das internationale Publikum war es nur sinnvoll, von ANSI C ab dem Jahr 1989 bis zum Jahr 1990 zu sprechen, als der ISO-Standard veröffentlicht wurde. So sind informell C89 und ANSI C zu Synonymen geworden, obwohl ISO-Standards auch heute noch von ANSI übernommen werden. Aber seit 1990 ist es Menschen außerhalb der USA völlig egal, was das American National Standard Institute vorhat.

    – Ludin

    16. Dezember 2013 um 9:21 Uhr


Per Johanssons Benutzeravatar
Per Johansson

POSIX ist eine Obermenge der Standard-C-Bibliothek, und es ist wichtig zu beachten, dass sie sich darauf bezieht. Wenn C und POSIX jemals in Konflikt geraten, gewinnt C.

Sockets, Dateideskriptoren, Shared Memory usw. sind alle Teil von POSIX, existieren aber nicht in der C-Bibliothek.

pthread.h wird für POSIX-Threads und verwendet threads.h ist ein neuer Header für C11 und ist Teil der C-Bibliothek. Vielleicht werden pThreads irgendwann in der Zukunft zugunsten der C-Threads veraltet sein, aber Sie können wahrscheinlich noch nicht darauf zählen, dass C11 weit verbreitet ist. Wenn Sie also Portabilität wünschen, sollten Sie vorerst pthreads bevorzugen. Wenn Portabilität keine Rolle spielt und Sie C11-Threads zur Verfügung haben, sollten Sie diese wahrscheinlich verwenden.

  • Beispielsweise wird signal.h sowohl in erwähnt en.wikipedia.org/wiki/C_standard_library und in en.wikipedia.org/wiki/C_POSIX_library. Aber ich verstehe immer noch nicht. Ist signal.ha Header der Standard-C-Bibliothek oder ist es nur in POSIX-Systemen verfügbar?

    – Koray Tugay

    4. Juni 2015 um 19:34 Uhr

  • @KorayTugay Der beste Weg, es herauszufinden, ist IMO, zu gehen POSIX-Webseite und suchen signal.h. Es wird feststellen, dass der Header in der C-Standardbibliothek vorhanden ist, aber dass POSIX sich darauf erstreckt. Erweiterungen sind mit gekennzeichnet CX. Es besagt, dass Sie eine Definition hinzufügen müssen, aber normalerweise werden die Erweiterungen durch die Standard-Compiler-Flags aktiviert. Eine weitere Möglichkeit ist das Lesen der C-Standard.

    – Per Johansson

    5. Juni 2015 um 8:48 Uhr


  • Ich glaube nicht, dass pthreads zugunsten von C11-Threads verworfen werden, zumal C11-Threads (bis auf ein unwichtiges Detail) eine richtige Teilmenge von pthreads sind.

    – fuz

    4. Oktober 2016 um 17:17 Uhr

  • @Alcott – Um die großartige Antwort von @Per Johansson zu ergänzen, kann man meines Wissens “berücksichtigen”, dass der C-Standard “minimale” Betriebssystemfunktionen “annimmt”, also beispielsweise davon ausgeht, dass nur ein einziger Prozess ausgeführt wird das System, daher gibt es “keine Notwendigkeit” (keine Definition) für Header wie <semaphore.h>, <pthread.h> und so weiter (jedoch sollte ich beachten, dass spätere Versionen von C, soweit ich weiß, C11 enthalten <thread.h> Definition).

    – Guy Avraham

    22. August 2018 um 10:44 Uhr


  • @PerJohansson wie nennt man den Teil der POSIX-C-Bibliothek, der nicht die Standard-C-Bibliothek ist?

    – Tim

    3. September 2018 um 22:27 Uhr

Das C Posix library ist eine Spezifikation einer C-Standardbibliothek für POSIX-Systeme. Er wurde gleichzeitig mit dem ANSI-C-Standard entwickelt. Es wurden einige Anstrengungen unternommen, um POSIX mit Standard-C kompatibel zu machen; POSIX enthält zusätzliche Funktionen zu denen, die in Standard-C eingeführt wurden.

Ciro Santilli Benutzeravatar von OurBigBook.com
Ciro Santilli OurBigBook.com

POSIX 7-Zitat

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

1.1 Verhältnis zu anderen formalen Standards

Es wurde große Sorgfalt darauf verwendet sicherzustellen, dass dieser Band von POSIX.1-2008 vollständig an den folgenden Standards ausgerichtet ist:

ISO C (1999) ISO/IEC 9899:1999, Programmiersprachen – C, einschließlich ISO/IEC 9899:1999/Cor.1:2001(E), ISO/IEC 9899:1999/Cor.2:2004(E), und ISO/IEC 9899:1999/Cor.3.

Auf Teile des ISO/IEC 9899:1999-Standards (im Folgenden als ISO-C-Standard bezeichnet) wird verwiesen, um Anforderungen zu beschreiben, die auch in diesem Band von POSIX.1-2008 vorgeschrieben sind. Einige Funktionen und Header, die in diesem Band von POSIX.1-2008 enthalten sind, haben eine Version im ISO-C-Standard; in diesem Fall werden gegebenenfalls CX-Markierungen hinzugefügt, um anzuzeigen, wo die ISO-C-Norm erweitert wurde (siehe Codes). Jeder Konflikt zwischen diesem Band von POSIX.1-2008 und dem ISO-C-Standard ist unbeabsichtigt.

Ich habe einige wichtige API-Erweiterungen aufgelistet unter: Ich habe nie wirklich verstanden: Was ist POSIX?

ANSI C lebt noch, denke ich: ANSI C wird von ISO C, Cxx, geerbt und erweitert. POSIX hat ANSI C absolut befolgt.”

Wir können ANSI C auf Windows, einem Unix-ähnlichen, eingebetteten Gerät, einfach schreiben; aber Cxx oder POSIX haben möglicherweise Probleme.

1419250cookie-checkUnterschied zwischen C-Standardbibliothek und C-POSIX-Bibliothek

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy