2012-02-21 5 views
51

"C 표준 라이브러리"와 "C POSIX 라이브러리"에 정의 된 많은 헤더 파일 중 일부이기 때문에 약간 혼란 스럽습니다. "C 표준 lib".C 표준 라이브러리와 C POSIX 라이브러리의 차이점

그래서 "C 표준 라이브러리"는 ANSI C 조직에 의해 정의 된 라이브러리이고, 다른 플랫폼 (Win32/Unix 계열)에 다른 구현이 있으며 "C POSIX lib"는 단지 구현이라고 가정합니다. 유닉스와 비슷한 운영체제에서 "C 표준 라이브러리"용으로, 맞습니까?

그러나 "C POSIX lib"에는 <sys/types.h>, <sys/wait.h><pthread.h>과 같이 "C 표준 lib"에 지정되지 않은 일부 헤더가 포함되어 있습니다.

예를 들어 <pthread.h>을 가지고, 난 내가 포함해야 헤더 파일을 리눅스에서 멀티 스레드 프로그램, <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에서 [INCITS/ISO/IEC 9899-2012] (http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012)로 알려진 ANSI 표준으로 채택되었습니다. 이것은 새로운 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는 C 언트에 대한 찬성으로 언젠가는 미래에 사용되지 않을 것이지만, 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'로 표시됩니다. 그것은 당신이 정의를 추가해야한다고 말하지만, 보통 확장은 기본 컴파일러 플래그에 의해 가능합니다. 또 다른 옵션은 [C 표준] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)을 읽는 것입니다. –

+0

나는 pthread가 C11 스레드를 위해 더 이상 사용되지 않을 것이라고 생각하지 않습니다. 특히 C11 스레드는 pthreads의 적절한 하위 집합 (하나의 중요하지 않은 세부 사항 제외)이기 때문입니다. – 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을 포함하여 C/C 언어를 지원합니다.

ISO/IEC 9899 : 1999 표준 (이하 ISO C 표준이라고 함)의 일부는 본 볼륨의 POSIX.1-2008에서 요구하는 요구 사항을 설명하기 위해 참조됩니다. POSIX.1-2008의이 볼륨에 포함 된 일부 함수와 헤더에는 ISO C 표준의 버전이 있습니다. 이 경우 ISO C 표준이 확장 된 위치를 표시하기 위해 CX 표식이 적절하게 추가됩니다 (코드 참조). 이 양의 POSIX.1-2008과 ISO C 표준 간의 충돌은 의도하지 않습니다.

나는에서 몇 가지 주요 API 확장을 나열했습니다 : I never really understood: what is POSIX?

관련 문제