2013-03-01 34 views
8

Tôi chỉ phát hiện ra rằng open() (man 2 mở) gọi hệ thống có hai phiên bản:open() gọi hệ thống đa hình

int open(const char *pathname, int flags); 
    int open(const char *pathname, int flags, mode_t mode); 

Và quả thực, người ta có thể sử dụng một trong hai trong một file C duy nhất và cả hai sẽ công việc. Tiêu chuẩn C có thể đạt được điều này như thế nào?

+0

@ZhangYuan Trong C? Không có gì. –

Trả lời

4

Trong thực tế, nó không phải là C++ - chức năng kiểu quá tải. Chỉ là open() là variadic:

int open(const char *fname, int flags, ...); 

Và chỉ khi "cờ" yêu cầu, nó sẽ tìm đối số thứ ba.

+0

không thấy bất kỳ mối quan hệ nào giữa cờ và chế độ trong trang người đàn ông. Chăm sóc để xây dựng? – lang2

+0

@ lang2 chế độ * chỉ được sử dụng nếu được yêu cầu, ví dụ: khi 'O_CREAT' được chỉ định làm cờ. Chẳng có ý nghĩa gì khi nói về chế độ tập tin khi bạn mở một tập tin để đọc ... –

4

Nó có thể được thực hiện như một hàm đối số biến.

Các tài liệu POSIX cho open quy định cụ thể nó như thế này:

int open(const char *path, int oflag, ...); 
Các vấn đề liên quan