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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top