2015-02-19 15 views
5

Sto usando x86_64 GNU/Linux con gcc.
sezione sinossi del man -s2 open dice:open() richiesta file di chiamata di sistema

#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); 

Ora, quando provo a compilare il seguente frammento di codice, gcc non lanciare un avvertimento/errore.

#include <stdio.h> 
#include <fcntl.h> 

int main(int argc, char **argv) 
{ 
    int fd; 

    fd = open("foo.txt", O_RDWR, 0777); 
    if(fd == -1) 
     perror("open"); 

    fd = creat("foo.txt", 0777); 
    if(fd == -1) 
     perror("creat"); 

    close(fd); 
    return 0; 
} 

Così sono types.h e stat.h facoltativa? Che scopo servono nella manpage di open()?

+0

Controllare 'fcntl.h' - Presumo che includa' types.h' e 'stat.h' – user590028

+0

Include' 'e' '. Ma ancora non capisco perché '' e '' ci siano in 'man -s2 open'. – rootkea

+0

Dato che non hai specificato, hai compilato '-Wall'? In caso contrario, farlo e controllare quindi gli avvisi. – DoxyLover

risposta

4

La pagina man serve come istruzione sia per i programmatori che per i produttori di compilatori.

E 'possibile che tu non necessità di includerli sul sistema. Tuttavia, la pagina man descrive un modo portabile per usare i metodi, quindi dovresti includerli comunque.

+0

Non posso discutere, non posso verificare se la necessità di '' e '' varia da sistema a sistema in quanto non ho un altro sistema da testare. Potete dare esplicitamente un esempio di sistema che ha bisogno di queste intestazioni poiché non voglio lasciare questo a _possibile essere_, _may be not_ – rootkea

+2

@rootkea: Generalmente, le cose * do * variano. Come ha detto KlasLindbäck, la manpage specifica come farlo * portably *, e dovresti attenervisi (perché dopotutto, non costa nulla avere quegli extra inclusi se non necessario, ma il tuo codice non verrà compilato, o peggio, invocherà UB, se * sono * necessari e non hai incluso). –

Problemi correlati