Devo includere alcune o tutte le intestazioni elencate nella sinossi di una pagina man?
Domanda
Ad esempio, prendi open(2), che ha la seguente sinossi:
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); int creat(const char *pathname, mode_t mode);
Devo includere tutti quei file di intestazione o qualcuno di questi va bene?Nel primo caso, come faccio a sapere quali file header contengono quali funzioni, macro e typedef?
Soluzione
Dovresti includerli tutti.La specifica Posix ti dirà cosa c'è in ciascuna (ad esempio, questo è la specifica POSIX per fcntl.h) o almeno ciò che è garantito per essere in ciascuna.
Altri suggerimenti
Dovresti includere tutti questi file di intestazione.Le intestazioni menzionate nella sinossi dovrebbero essere incluse.
AFAIK, è necessario includere tutti quei file di intestazione.Perché è necessario sapere quale file di intestazione contiene macro, funzioni o typedefs, se alla fine include tutti loro?
Soltanto <fcntl.h>
è obbligatorio.Ci sono due pagine man per open
. http://linux.die.net/man/2/open E http://linux.die.net/man/3/open.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);
Se usi il sovraccarico con mode_t
, hai bisogno <sys/types.h>
.
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *path, int oflag, ... );
Per quest'ultimo sovraccarico, opengroup.org considera <sys/stat.h>
opzionale.Anche, <sys/types.h>
non è nemmeno richiesto.
Il requisito di includere <sys/types.h> è stato rimosso.Sebbene fosse necessario per le implementazioni conformi alle precedenti specifiche POSIX, non era necessario per le applicazioni UNIX.