2010-06-01 9 views
7

Bajo el directorio/usr/include en Linux que entré en el comando: encontrar -type f -name unistd.h que dio el siguiente resultado:¿Cuál es la diferencia entre los diversos unistd.h en/usr/include en Linux?

./unistd.h ./linux/unistd.h ./asm-generic/unistd.h ./bits/unistd.h ./asm/unistd.h ./sys/unistd.h

mi pregunta es, ¿cuál es el propósito de cada unistd.h , dado que solo hay una definición de ese archivo en la especificación de Unix único

Gracias de antemano.

Respuesta

7

linux/unistd.h realidad apunta a asm/unistd.h, que a su vez apunta a cualquiera asm/unistd_32.h o asm/unistd_64.h, que es donde los números de llamada del sistema se definen y presentan al espacio de usuario dependiendo de la arquitectura del sistema. Estos provienen del kernel.

bits/unistd.h es un conjunto de macros que aumentan unistd.h (en su mayoría cosas para ayudar a prevenir desbordamientos de buffer), que es condicionalmente incluye a través de:

/* Define some macros helping to catch buffer overflows. */ 
#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline 
# include <bits/unistd.h> 
#endif 

En esencia, sólo el encabezado POSIX requiere es, de hecho, simplemente unistd.h , el resto son extensiones o definiciones del kernel. Por lo tanto, basta con incluir unistd.h y todo lo que tiene que preocuparse es hacer todo lo que necesita según su arquitectura y las opciones de compilación que haya seleccionado.

3

Es una técnica común en C y C++: tiene un solo archivo con el nombre "estándar" en el lugar "estándar", en este caso ./unistd.h, y luego tiene ese archivo que incluye una o más implementaciones archivos específicos, según las macros del preprocesador. Si observa casi cualquier archivo de cabecera C o C++ "estándar", lo verá incluyendo otros archivos no mencionados en ningún estándar.

0

Básicamente piense en /usr/include/unistd.h como un inteligente enlace simbólico. Apuntará a una implementación correcta dependiendo de cuáles sean sus condiciones de operación.

Dicho esto, a veces es difícil averiguar cuál es la implementación correcta.

Cuestiones relacionadas