2011-11-10 9 views
6

Dove o come è possibile trovare le intestazioni C corrette da includere in un programma C++ per ottenere la dichiarazione delle funzioni C dichiarate in un ambiente conforme a POSIX?Intestazioni per le funzioni C POSIX

sto chiedendo questo perché avevo bisogno di usare la chiamata di sistema open() nel mio programma C++ per i miei scopi, così ho inizialmente provato a includere le intestazioni menzionati nella documentazione in linea su open() (nella sezione SINTASSI), che sono sys/stat.h e fcntl.h. Tuttavia, durante il tentativo di compilazione, il compilatore si è lamentato del fatto che open() non è stato dichiarato. Dopo una ricerca su google, ho scoperto che un'altra possibilità era unistd.h. Ho provato a usare quell'intestazione e il programma è stato compilato. Così sono tornato alla documentazione di POSIX per leggere ulteriori informazioni su unistd.h per verificare se fosse stato menzionato open(), ma non sono riuscito a trovare nulla a riguardo.

Cosa sto sbagliando? Perché c'è questa discrepanza tra la documentazione POSIX e il mio ambiente GCC?

risposta

8

Sul mio Linux Debian/Sid, i man 2 open pagina afferma:

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

quindi è necessario includere tutti e tre sopra file. E open è dichiarato in /usr/include/fcntl.h ma ha bisogno della dichiarazione degli altri due include.

e la seguente file di prova

/* 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 senza avvisi.

Problemi correlati