2012-02-21 14 views
51

Jestem trochę zdezorientowana przez "C standard lib" i "C POSIX lib", ponieważ odkryłem, że wiele plików nagłówkowych zdefiniowanych w "C POSIX lib" jest również częścią "Standardowa lib".Różnica między biblioteką standardową C a biblioteką C POSIX

Zakładam więc, że "C standard lib" jest biblioteką zdefiniowaną przez organizację ANSI C, a różne wersje są różne na różnych platformach (Win32/Unix), a "C POSIX lib" to tylko implementacja dla "C standard lib" na systemach uniksopodobnych, prawda?

Ale "C POSIX lib" zawiera niektóre nagłówki niewymienione w "C standardowej lib", takie jak <sys/types.h>, <sys/wait.h> i <pthread.h>.

Take <pthread.h> jako przykład, jak sądzę jego „C średnia lib” odpowiednikiem jest <threads.h>, następnie jeśli chcę pisać wielowątkowy program na Linux, który nagłówek pliku należy podać, <pthread.h> lub <threads.h>?

+5

ANSI C jest nieaktualny od 1990 roku, kiedy C stał się międzynarodowym standardem. Odtąd C jest utrzymywane przez [grupę roboczą ISO] (http://www.open-std.org/jtc1/sc22/wg14/). – Lundin

+4

@Lundin Całkowicie nonsens. ANSI C jest niczym innym jak przestarzałym. W rzeczywistości C11 został przyjęty przez INCITS jako standard ANSI znany jako [INCITS/ISO/IEC 9899-2012] (http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012) który jest nowym standardem ANSI C. – Wiz

+0

@Wiz Jest to międzynarodowy standard i jest to strona międzynarodowa. Mając to na uwadze, nie ma sensu mówić o ANSI C od 1990 roku. To jest tak samo, jak gdybym zaczął odnosić się do C na tej stronie jako "SS C", ponieważ jestem ze Szwecji i szwedzkiego standardu nazywane jest SS/ISO/IEC 9899. – Lundin

Odpowiedz

36

POSIX jest nadzbiorem standardowej biblioteki C, i ważne jest, aby pamiętać, że się do niego. Jeśli C i POSIX są w konflikcie, C wygrywa.

Gniazda, deskryptory plików, pamięć współdzielona itp. Są częścią POSIX, ale nie istnieją w bibliotece C.

jest używany do wątków POSIX, a threads.h jest nowym nagłówkiem dla C11 i jest częścią biblioteki C. Być może pthreads zostaną wycofane kiedyś w przyszłości na korzyść C, jednak prawdopodobnie nie możesz liczyć na C11, aby mieć jeszcze powszechne wdrożenie. Dlatego jeśli chcesz mieć możliwość przenoszenia, powinieneś na razie preferować pthreads. Jeśli przenośność nie jest problemem, a masz dostępne wątki C11, prawdopodobnie powinieneś ich użyć.

+0

Na przykład signal.h jest wymieniony w http://en.wikipedia.org/wiki/C_standard_library iw http://en.wikipedia.org/wiki/C_POSIX_library. Ale nadal nie rozumiem. Czy signal.h jest nagłówkiem standardowej biblioteki C, czy jest dostępny tylko w systemach POSIX? –

+1

@KorayTugay najlepszym sposobem, aby to rozgryźć, jest wydanie przez IMO strony [POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799) i wyszukanie [signal.h] (http: // pubs. opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html). Zauważy, że nagłówek istnieje w bibliotece standardowej C, ale POSIX rozciąga się na nią. Rozszerzenia są oznaczone "CX". Mówi, że musisz dodać definicję, ale zazwyczaj rozszerzenia są włączone przez domyślne flagi kompilatora. Inną opcją jest przeczytanie [standardu C] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf). –

+0

Nie sądzę, że pthreads będą przestarzałe na rzecz wątków C11, zwłaszcza, że ​​wątki C11 są (z wyjątkiem jednego nieistotnego szczegółu) odpowiednim podzbiorem pthreadów. – fuz

9

Biblioteka C POSIX jest specyfikacją standardowej biblioteki C dla systemów POSIX. Został opracowany w tym samym czasie co standard ANSI C. Podjęto pewne wysiłki, aby POSIX był kompatybilny ze standardowym C; POSIX zawiera dodatkowe funkcje do tych wprowadzonych w standardzie C.

3

POSIX 7 cytat

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

1,1 Stosunek do innych standardów formalnych

Wielki dołożono starań, aby zapewnić, że ta wielkość POSIX.1-2008 jest w pełni zgodne z następujące standardy:

ISO C (1999) ISO/IEC 9899: 1999, Program Języki - C, w tym ISO/IEC 9899: 1999/Cor.1: 2001 (E), ISO/IEC 9899: 1999/Cor.2: 2004 (E), i ISO/IEC 9899: 1999/Cor.3.

Części normy ISO/IEC 9899: 1999 (zwane dalej normą ISO C) są przywoływane w celu opisania wymagań również wymaganych w tym tomie POSIX.1-2008. Niektóre funkcje i nagłówki zawarte w tym tomie POSIX.1-2008 mają wersję w standardzie ISO C; w tym przypadku oznaczenia CX są dodawane odpowiednio, aby pokazać, gdzie standard ISO C został przedłużony (patrz Kody). Wszelkie konflikty między tym tomem POSIX.1-2008 a standardem ISO C są niezamierzone.

mam wymienione kilka istotnych rozszerzeń API pod adresem: I never really understood: what is POSIX?

Powiązane problemy