2012-02-21 59 views
51

Tôi hơi bối rối bởi "C lib chuẩn" và "C POSIX lib", vì tôi thấy rằng, nhiều tệp tiêu đề được xác định trong "C POSIX lib" cũng là một phần của "C lib chuẩn". Vì vậy, tôi giả định rằng, "C lib tiêu chuẩn" là một lib được định nghĩa bởi tổ chức ANSI C, và có những triển khai khác nhau trên các nền tảng khác nhau (Win32/Unix), và "C POSIX lib" chỉ là một triển khai cho "C standard lib" trên các hệ điều hành giống Unix, phải không?Sự khác biệt giữa thư viện chuẩn C và thư viện C POSIX

Nhưng "C POSIX lib" chứa một số tiêu đề không được chỉ định trong "C standard lib", chẳng hạn như <sys/types.h>, <sys/wait.h><pthread.h>.

Hãy <pthread.h> làm ví dụ, tôi đoán nó "C chuẩn lib" đối tác là <threads.h>, sau đó nếu tôi muốn viết một chương trình đa luồng dữ liệu trên Linux, mà tập tin tiêu đề tôi cần bao gồm, <pthread.h> hoặc <threads.h>?

+5

ANSI C đã lỗi thời từ năm 1990, khi C đã trở thành một tiêu chuẩn quốc tế. Kể từ đó, C được duy trì bởi một [nhóm làm việc ISO] (http://www.open-std.org/jtc1/sc22/wg14/). – Lundin

+4

@Lundin Hoàn toàn vô nghĩa. ANSI C không là gì ngoài lỗi thời. Trên thực tế, C11 đã được INCITS chấp nhận như một tiêu chuẩn ANSI được gọi là [INCITS/ISO/IEC 9899-2012] (http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012) đó là chuẩn ANSI C mới. – Wiz

+0

@Wiz Đây là một tiêu chuẩn quốc tế và đây là một trang web quốc tế. Với ý nghĩ đó, nó đã không có ý nghĩa để nói về ANSI C từ năm 1990. Nó cũng giống như tôi sẽ bắt đầu đề cập đến C trên trang web này là "SS C", kể từ khi tôi đến từ Thụy Điển và tiêu chuẩn Thụy Điển được gọi là SS/ISO/IEC 9899. – Lundin

Trả lời

36

POSIX là một bộ siêu của thư viện C chuẩn, và điều quan trọng cần lưu ý là nó bảo vệ nó. Nếu C và POSIX là bao giờ trong cuộc xung đột, C thắng.

Ổ cắm, bộ mô tả tệp, bộ nhớ dùng chung, v.v. đều là một phần của POSIX, nhưng không tồn tại trong thư viện C.

pthread.h được sử dụng cho các chủ đề POSIX và threads.h là tiêu đề mới cho C11 và là một phần của thư viện C. Có lẽ pthreads sẽ không được chấp nhận đôi khi trong tương lai ủng hộ của C, tuy nhiên bạn có lẽ không thể đếm trên C11 để có triển khai rộng rãi được nêu ra. Vì vậy nếu bạn muốn tính di động, bạn nên thích pthreads cho bây giờ. Nếu tính di động không phải là một mối quan tâm, và bạn có các chủ đề C11 có sẵn, có lẽ bạn nên sử dụng chúng.

+0

Ví dụ: signal.h được đề cập trong http://en.wikipedia.org/wiki/C_standard_library và trong http://en.wikipedia.org/wiki/C_POSIX_library. Nhưng tôi vẫn không hiểu. Là signal.h một tiêu đề của thư viện C tiêu chuẩn, hoặc là nó chỉ có sẵn trong các hệ thống POSIX? –

+1

@KhoayTìm cách tốt nhất để tìm ra là IMO truy cập [trang web POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799) và tìm kiếm [signal.h] (http: // pubs. opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html). Nó sẽ lưu ý rằng tiêu đề tồn tại trong thư viện chuẩn C nhưng POSIX mở rộng đến nó. Các tiện ích được đánh dấu bằng 'CX'. Nó nói rằng bạn phải thêm một định nghĩa, nhưng thường các phần mở rộng được kích hoạt bởi các cờ trình biên dịch mặc định. Một lựa chọn khác là đọc [C standard] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf). –

+0

Tôi không nghĩ rằng pthreads sẽ không được dùng để ủng hộ các chủ đề C11, đặc biệt là từ các chủ đề C11 (ngoại trừ một chi tiết không quan trọng) một tập hợp con thích hợp của pthreads. – fuz

9

Thư viện C POSIX là đặc điểm kỹ thuật của thư viện chuẩn C cho hệ thống POSIX. Nó được phát triển cùng lúc với tiêu chuẩn ANSI C. Một số nỗ lực đã được thực hiện để làm cho POSIX tương thích với tiêu chuẩn C; POSIX bao gồm các chức năng bổ sung cho những chức năng được giới thiệu trong tiêu chuẩn C.

3

POSIX 7 quote

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

1,1 Mối quan hệ với các tiêu chuẩn chính thức khác

lớn chăm sóc đã được thực hiện để đảm bảo rằng khối lượng này POSIX.1-2008 là hoàn toàn phù hợp với các tiêu chuẩn sau:

ISO C (1999) ISO/IEC 9899: 1999, Programm ing Ngôn ngữ - C, bao gồm ISO/IEC 9899: 1999/Cor.1: 2001 (E), ISO/IEC 9899: 1999/Cor.2: 2004 (E) và ISO/IEC 9899: 1999/Cor.3.

Các bộ phận của tiêu chuẩn ISO/IEC 9899: 1999 (sau đây được gọi là tiêu chuẩn ISO C) được tham chiếu để mô tả các yêu cầu cũng được quy định bởi khối lượng POSIX.1-2008 này. Một số chức năng và tiêu đề được bao gồm trong khối lượng POSIX.1-2008 này có phiên bản theo tiêu chuẩn ISO C; trong trường hợp này, các dấu hiệu CX được thêm vào thích hợp để hiển thị nơi chuẩn ISO C đã được mở rộng (xem Mã). Bất kỳ xung đột nào giữa khối lượng POSIX.1-2008 và tiêu chuẩn ISO C này là vô ý.

tôi đã liệt kê một số phần mở rộng API lớn tại địa chỉ: I never really understood: what is POSIX?

Các vấn đề liên quan