2016-12-05 2 views
1

open()을 호출 할 때 pathname과 선택 사항 인 flags이 주어진 파일 설명자를 반환한다는 것은 잘 알려져 있습니다. 경로 이름이 디렉토리가 아닌 경우POSIX에서만 파일 열기

오픈이 실패 원인 : man page for open()에서

int fd; 
if ((fd = open(pathname, O_RDONLY)) == -1) { 
    printf("Could not open file\n"); 
    return; 
} 

는, 플래그 O_DIRECTORY 어디에 정의된다. 이 플래그는 커널 버전 2.1.126에 추가되었으므로 FIFO 또는 테이프 장치에서 opendir (3)이 호출 된 경우 서비스 거부 문제가 발생하지 않도록하려면 서비스 문제가 발생하지 않도록하십시오.

그러나 나는 오히려 파일보다 디렉토리에 실패 open()을 야기 O_FILE 같은 무언가를 찾을 수가 없습니다.

stat()을 호출하는 대신 open() 또는 pathname이 파일인지 다른 방법으로 전달할 수있는 플래그가 있습니까?

답변

1

아니요, 해당 플래그가 없습니다. stat 기능은 경쟁 조건이 있기 때문에 사용할 수 없습니다. (일반적으로, 당신은 단지 open하지 조합 자체 stat를 호출해야합니다.)

옵션은 다음과 같습니다

  1. 사용 fstat.

  2. 파일을 쓰기 위해 열어서 디렉토리에 EISDIR을 반환합니다.

  3. read으로 전화를 걸어 EISDIR을 디렉터리에 반환합니다.