77
votes

I'm a little confused by "C standard lib" and "C POSIX lib", because I found that, many header files defined in "C POSIX lib" are also part of "C standard lib".

So, I assume that, "C standard lib" is a lib defined by ANSI C organization, and there are different implementation on different platforms (Win32/Unix-like), and "C POSIX lib" is just a implementation for "C standard lib" on Unix-like OSes, right?

But "C POSIX lib" contains some headers not specified in "C standard lib", such as <sys/types.h>, <sys/wait.h>, and <pthread.h>.

Take <pthread.h> as an example, I presume its "C standard lib" counterpart is <threads.h>, then if I want to write a multi-threaded program on Linux, which header file should I include, <pthread.h> or <threads.h>?

4
ANSI C has been obsolete since 1990, when C became an international standard. Since then, C is maintained by an ISO working group.Lundin
@Lundin Totally nonsense. ANSI C is nothing but obsolete. In fact C11 was adopted by INCITS as an ANSI standard known as INCITS/ISO/IEC 9899-2012 which is the new ANSI C standard.Wiz
@Wiz It is an international standard and this is an international site. With that in mind, it has not made any sense to speak about ANSI C since 1990. It is the same as if I would start referring to C on this site as "SS C", since I'm from Sweden and the Swedish standard is called SS/ISO/IEC 9899.Lundin
@Lundin While people consistently think that 'ANSI C' means C89 doesn't make it true; especially when ANSI C adopted C11 in 2012; thereby making 'ANSI C' mean C11. No matter how much people might think it's not.Wiz
@Wiz You are missing the point. For the international audience, it only made sense to speak of ANSI C from the year 1989 to the year 1990, when the ISO standard was released. Thus informally C89 and ANSI C have become synonymous, even though ISO standards are still adopted by ANSI today. But since 1990, people outside the US couldn't care less about what the American National Standard Institute is up to.Lundin

4 Answers

58
votes

POSIX is a superset of the standard C library, and it's important to note that it defers to it. If C and POSIX is ever in conflict, C wins.

Sockets, file descriptors, shared memory etc. are all part of POSIX, but do not exist in the C library.

pthread.h is used for POSIX threads and threads.h is a new header for C11 and is part of the C library. Perhaps pthreads will be deprecated sometime in the future in favor of the C ones, however you probably can't count on C11 to have widespread deployment yet. Therefore if you want portability you should prefer pthreads for now. If portability is not a concern, and you have C11 threads available, you should probably use those.

11
votes

The C POSIX library is a specification of a C standard library for POSIX systems. It was developed at the same time as the ANSI C standard. Some effort was made to make POSIX compatible with standard C; POSIX includes additional functions to those introduced in standard C.

5
votes

POSIX 7 quote

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

1.1 Relationship to Other Formal Standards

Great care has been taken to ensure that this volume of POSIX.1-2008 is fully aligned with the following standards:

ISO C (1999) ISO/IEC 9899:1999, Programming Languages - C, including ISO/IEC 9899:1999/Cor.1:2001(E), ISO/IEC 9899:1999/Cor.2:2004(E), and ISO/IEC 9899:1999/Cor.3.

Parts of the ISO/IEC 9899:1999 standard (hereinafter referred to as the ISO C standard) are referenced to describe requirements also mandated by this volume of POSIX.1-2008. Some functions and headers included within this volume of POSIX.1-2008 have a version in the ISO C standard; in this case CX markings are added as appropriate to show where the ISO C standard has been extended (see Codes). Any conflict between this volume of POSIX.1-2008 and the ISO C standard is unintentional.

I have listed some major API extensions at: I never really understood: what is POSIX?

0
votes

ANSI C is still alive, I think: ANSI C is inherited and extended by ISO C, Cxx. POSIX have been obeying ANSI C absolutely."

We can write ANSI C on Windows, Unix-Like, embedded device easily; but Cxx, or POSIX may have issue.