2012-02-21 28 views
51

Estoy un poco confundido por "C standard lib" y "C POSIX lib", porque encontré que, muchos archivos de encabezado definidos en "C POSIX lib" también son parte de "C estándar lib".Diferencia entre la biblioteca C estándar y la biblioteca C POSIX

Supongo que "C standard lib" es una lib definida por la organización ANSI C, y hay diferentes implementaciones en diferentes plataformas (Win32/Unix) y "C POSIX lib" es solo una implementación para "C standard lib" en sistemas operativos tipo Unix, ¿verdad?

Pero "C POSIX lib" contiene algunos encabezados no especificados en "C standard lib", como <sys/types.h>, <sys/wait.h> y <pthread.h>.

Tome <pthread.h> como ejemplo, supongo que su "estándar C lib" contraparte es <threads.h>, a continuación, si quiero escribir un programa multi-hilo en Linux, que el archivo de cabecera debería incluir, <pthread.h> o <threads.h>?

+5

ANSI C ha sido obsoleta desde 1990, cuando C se convirtió en una norma internacional. Desde entonces, C es mantenido por un [grupo de trabajo ISO] (http://www.open-std.org/jtc1/sc22/wg14/). – Lundin

+4

@Lundin Totalmente sin sentido. ANSI C no es más que obsoleto. De hecho, C11 fue adoptado por INCITS como un estándar ANSI conocido como [INCITS/ISO/IEC 9899-2012] (http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012) que es el nuevo estándar ANSI C. – Wiz

+0

@Wiz Es un estándar internacional y este es un sitio internacional. Con esto en mente, no tiene ningún sentido hablar sobre ANSI C desde 1990. Es lo mismo que si comenzara a referirme a C en este sitio como "SS C", ya que soy de Suecia y el estándar sueco se llama SS/ISO/IEC 9899. – Lundin

Respuesta

36

POSIX es un superconjunto de la biblioteca C estándar, y es importante tener en cuenta que se lo merece. Si C y POSIX alguna vez entran en conflicto, C gana.

Los sockets, descriptores de archivos, memoria compartida, etc. son todos parte de POSIX, pero no existen en la biblioteca C.

pthread.h se utiliza para hilos POSIX y threads.h es un nuevo encabezado para C11 y es parte de la biblioteca C. Quizás pthreads se desaprobarán en el futuro a favor de los C, sin embargo, probablemente no se pueda contar con C11 para tener una implementación generalizada todavía. Por lo tanto, si desea la portabilidad, debería preferir pthreads por ahora. Si la portabilidad no es una preocupación, y tiene subprocesos C11 disponibles, probablemente debería usarlos.

+0

Por ejemplo, signal.h se menciona en http://en.wikipedia.org/wiki/C_standard_library y en http://en.wikipedia.org/wiki/C_POSIX_library. Pero todavía no entiendo. ¿Significa signal.h un encabezado de biblioteca C estándar, o solo está disponible en sistemas POSIX? –

+1

@KorayTugay la mejor manera de averiguarlo es IMO para ir a [página web de POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799) y buscar [signal.h] (http: // pubs. opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html). Notará que el encabezado existe en la biblioteca estándar C pero que POSIX se extiende a él. Las extensiones están marcadas con 'CX'. Dice que debe agregar una definición, pero generalmente las extensiones están habilitadas por los indicadores de compilación predeterminados. Otra opción es leer el [estándar C] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf). –

+0

No creo que los subprocesos vayan a estar en desuso en favor de los subprocesos C11, especialmente dado que los subprocesos C11 son (a excepción de un detalle sin importancia) un subconjunto apropiado de pthreads. – fuz

9

La biblioteca C POSIX es una especificación de una biblioteca estándar C para sistemas POSIX. Fue desarrollado al mismo tiempo que el estándar ANSI C. Se hicieron algunos esfuerzos para que POSIX sea compatible con el estándar C; POSIX incluye funciones adicionales a las introducidas en la norma C.

3

POSIX 7 cotización

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

1,1 Relación con otros estándares formal

gran cuidado se ha tomado para garantizar que este volumen de POSIX.1-2008 está totalmente alineado con los siguientes estándares:

ISO C (1999) ISO/IEC 9899: 1999, Programm Idiomas - C, incluidos ISO/CEI 9899: 1999/Cor.1: 2001 (E), ISO/CEI 9899: 1999/Cor.2: 2004 (E), e ISO/CEI 9899: 1999/Cor.3.

Las partes del estándar ISO/IEC 9899: 1999 (en lo sucesivo, el estándar ISO C) se mencionan para describir los requisitos también exigidos por este volumen de POSIX.1-2008. Algunas funciones y encabezados incluidos en este volumen de POSIX.1-2008 tienen una versión en el estándar ISO C; en este caso, las marcas CX se agregan según corresponda para mostrar dónde se ha extendido el estándar ISO C (ver Códigos). Cualquier conflicto entre este volumen de POSIX.1-2008 y el estándar ISO C es involuntario.

He enumerado algunas extensiones importantes de la API en: I never really understood: what is POSIX?

Cuestiones relacionadas