2011-11-10 17 views
6

¿Dónde o cómo puedo encontrar los encabezados C correctos para incluir en un programa C++ para obtener la declaración de funciones C declaradas en un entorno compatible con POSIX?Encabezados para C POSIX funciones

Lo pregunto porque necesitaba utilizar la llamada open() sistema en el programa en C++ para mis propósitos mi C, por lo que inicialmente tratado de incluir las cabeceras mencionadas en la documentación en línea sobre open() (en la sección SINOPSIS), que son sys/stat.h y fcntl.h. Sin embargo, al intentar compilar, el compilador se quejó de que open() no se había declarado. Después de una búsqueda en google, encontré que otra posibilidad era unistd.h. Intenté usar ese encabezado y el programa compilado. Así que volví a la documentación de POSIX para leer más sobre unistd.h para verificar si allí mencioné open(), pero no pude encontrar nada al respecto.

¿Qué estoy haciendo mal? ¿Por qué existe esta discrepancia entre la documentación POSIX y mi entorno GCC?

Respuesta

8

En mi Linux Debian/Sid, los estados man 2 open Página

SYNOPSIS 
    #include <sys/types.h> 
    #include <sys/stat.h> 
    #include <fcntl.h> 

Así que hay que incluir toda tres anteriores archivos. Y open se declara en /usr/include/fcntl.h pero necesita una declaración de los otros dos incluye.

Y el archivo de prueba siguiente

/* file testopen.c */ 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 

int 
testopen (void) 
{ 
    return open ("/dev/null", O_RDONLY); 
} 

compila con gcc -Wall -c testopen.c sin ninguna advertencia.

Cuestiones relacionadas