시스템소프트웨어 질문입니다.

Ris_toO의 이미지


Open 함수는 이러한 형식으로 작성되는데
int open (const char *FILENAME, int FLAGS);
int open (const char *FILENAME, int FLAGS, [mode_t MODE]);

'open 함수가 2개 또는 3개의 인자를 받아도 컴파일할 때 문제가 생기지 않는 이유' 가 무엇일까요??

shint의 이미지


함수에 권한 옵션이 있네요.
http://man7.org/linux/man-pages/man2/open.2.html
https://linux.die.net/man/3/open

#include <fcntl.h>
...
int fd;
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
char *filename = "/tmp/file";
...
fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, mode);

              S_IRWXU  00700 user (file owner) has read, write, and execute
                       permission
 
              S_IRUSR  00400 user has read permission
 
              S_IWUSR  00200 user has write permission
 
              S_IXUSR  00100 user has execute permission
 
              S_IRWXG  00070 group has read, write, and execute permission
 
              S_IRGRP  00040 group has read permission
 
              S_IWGRP  00020 group has write permission
 
              S_IXGRP  00010 group has execute permission
 
              S_IRWXO  00007 others have read, write, and execute permission
 
              S_IROTH  00004 others have read permission
 
              S_IWOTH  00002 others have write permission
 
              S_IXOTH  00001 others have execute permission

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

익명 사용자의 이미지

그런 것을 overloading 이라고 하지요. 그런데 C는 overloading 을 지원하지 않습니다. 그렇다면 사실은 overloading 이 아니라 mode_t 가 int 이고 open 은 가변 길이 인자를 받는 함수라고 가정해보면 설명이 되지요. 정말로 그런지는 mode_t와 open의 선언, 정의를 찾아보면 되겠지요. glibc 소스를 찾아보시면 됩니다. 아니면 open function overloading in c 로 구글링을 해보는 것도 방법이겠지요. 제 경우에는 검색 결과 목록에서 가장 상위에 바로 정답이 나오네요.