2015-02-19 14 views
5

Tôi đang sử dụng GNU/Linux x86_64 với gcc.
phần SYNOPSIS của man -s2 open nói:mở() yêu cầu tập tin tiêu đề cuộc gọi hệ thống

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

Bây giờ khi tôi cố gắng biên dịch đoạn mã sau, gcc không ném một cảnh báo/lỗi.

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

Vì vậy, types.hstat.h tùy chọn? Họ phục vụ mục đích gì trong manpage của open()?

+0

Kiểm tra 'fcntl.h' - Tôi giả sử nó bao gồm' types.h' và 'stat.h' – user590028

+0

Nó bao gồm' 'và' '. Nhưng tôi vẫn không hiểu tại sao ' 'và' 'có trong' man -s2 open'. – rootkea

+0

Vì bạn không nói, bạn đã biên dịch với '-Wall' chưa? Nếu không, hãy làm như vậy và kiểm tra để cảnh báo. – DoxyLover

Trả lời

4

Trang hướng dẫn sử dụng làm hướng dẫn cho cả lập trình viên và nhà sản xuất trình biên dịch.

Có thể bạn không cần để bao gồm chúng trên hệ thống của bạn. Tuy nhiên, trang người đàn ông mô tả một cách di động để sử dụng các phương pháp, vì vậy bạn nên bao gồm chúng anyway.

+0

Không thể tranh luận, không thể xác minh xem nhu cầu của '' và '' có thay đổi từ hệ thống này sang hệ thống khác không vì tôi không có hệ thống khác để kiểm tra. Bạn có thể đưa ra bất kỳ ví dụ nào về hệ thống cần các tiêu đề này một cách rõ ràng vì tôi không muốn để điều này thành _may được possible_, _may be not_ – rootkea

+2

@rootkea: Nói chung, mọi thứ * làm * thay đổi. Như KlasLindbäck đã nói, trang manpage chỉ định cách thực hiện * * một cách dễ dàng, và bạn nên gắn bó với nó (vì sau cùng, nó không tốn bất cứ thứ gì có thêm nếu không cần thiết, nhưng mã của bạn sẽ không biên dịch, hoặc tệ hơn, sẽ gọi UB, nếu chúng * là * cần thiết và bạn không bao gồm). –

Các vấn đề liên quan