2015-02-19 2 views
5

Я использую x86_64 GNU/Linux с gcc.
СИНТАКСИС раздел man -s2 open говорит: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); 

Теперь, когда я пытаюсь скомпилировать следующий фрагмент кода, gcc не бросает предупреждение/ошибка.

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

types.h Так это и stat.h необязательно? Какую цель они служат в manpage open()?

+0

Check 'fcntl.h' - Я предполагаю, что он включает' types.h' и 'stat.h' – user590028

+0

Он включает' 'и' '. Но я до сих пор не понимаю, почему '' и '' находятся в 'man -s2 open'. – rootkea

+0

С тех пор как вы не указали, вы скомпилировались с '-Wall'? Если нет, сделайте это и проверьте для предупреждений. – DoxyLover

ответ

4

Эта страница служит инструкцией как для программистов, так и для производителей компиляторов.

Возможно, что у вас нет необходимо включить их в вашу систему. Однако справочная страница описывает переносимый способ использования методов, поэтому вы должны включать их в любом случае.

+0

Не могу утверждать, не могу проверить, требуется ли необходимость в '' и' ' 'от системы к системе, поскольку у меня нет другой системы для тестирования. Можете ли вы дать какой-либо один пример системы, требующей этих заголовков, я не хочу оставлять это, возможно, возможно? _may be not_ – rootkea

+2

@rootkea: Вообще, вещи * делают * меняются. Как сказал KlasLindbäck, manpage указывает, как это сделать * portably *, и вы должны придерживаться его (потому что в конце концов, не стоит ничего включать лишние, если не нужно, но ваш код не будет компилироваться или хуже, вызовет UB, если они * необходимы * и вы не включили). –

Смежные вопросы