2011-11-10 29 views
6

Ở đâu hoặc làm cách nào tôi có thể tìm thấy các tiêu đề C chính xác để đưa vào chương trình C++ để nhận khai báo các hàm C được khai báo trong môi trường tuân thủ POSIX?Tiêu đề cho các chức năng C POSIX

Tôi yêu cầu điều này bởi vì tôi cần sử dụng cuộc gọi hệ thống open() trong chương trình C++ cho mục đích của mình, vì vậy ban đầu tôi đã cố gắng bao gồm tiêu đề được đề cập trong tài liệu trực tuyến về open() (trong phần SYNOPSIS) sys/stat.hfcntl.h. Tuy nhiên khi cố gắng biên dịch, trình biên dịch đã phàn nàn rằng open() không được khai báo. Sau khi tìm kiếm trên google, tôi thấy rằng một khả năng khác là unistd.h. Tôi đã thử sử dụng tiêu đề đó và chương trình được biên dịch. Vì vậy, tôi đã quay trở lại tài liệu POSIX để đọc thêm về unistd.h để kiểm tra xem open() đã được đề cập ở đó chưa, nhưng tôi không thể tìm thấy bất kỳ điều gì về nó.

Tôi đang làm gì sai? Tại sao có sự khác biệt này giữa tài liệu POSIX và môi trường GCC của tôi?

Trả lời

8

Trên Linux của tôi Debian/Sid, các tiểu bang man 2 open page:

SYNOPSIS 
    #include <sys/types.h> 
    #include <sys/stat.h> 
    #include <fcntl.h> 

Vì vậy, bạn cần phải bao gồm tất cả ba trên file. Và open được khai báo trong /usr/include/fcntl.h nhưng cần khai báo từ hai loại còn lại.

Và file test sau

/* file testopen.c */ 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 

int 
testopen (void) 
{ 
    return open ("/dev/null", O_RDONLY); 
} 

biên dịch với gcc -Wall -c testopen.c mà không cần bất kỳ cảnh báo.

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