2012-12-02 3 views
0

open()을 사용하여 파일을 만들고 싶습니다.정의 된 경우에도 쓰기 권한 없음

이 출력은 파일 읽기와 "테스트"생성, 이름을 지정해야합니다
int fd = open("testing", O_EXCL | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO); 
    if(fd == -1){ 
     perror("Error"); 
     return 1; } 

, 쓰기 및 사용자, 그룹 및 다른 사람에 대한 실행 권한을 : 여기

는 내 코드의 일부입니다.

하지만 내가 할 것은이 권한 "테스트"라는 이름의 파일입니다 : 그룹

-rwxr-xr-x 

쓰기 권한 및 기타 누락되었습니다.

는 또한
S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IWOTH |S_IXOTH) 

를 사용하여 시도하지만 난 여전히 같은 결과를 얻을.

이 문제를 어떻게 해결할 수 있습니까?

답변

2

사용 권한은 프로세스의 umask로 수정됩니다. 유효 사용 권한은 (mode & ~umask)입니다.

fchmod()을 사용하여 파일을 만든 후에 사용 권한을 변경해야합니다. fchmod()chmod()을 사용하고 기본 파일이 open()chmod() (TOCTOU 경주 용 Google) 사이의 다른 아이 노드를 가리 키도록 변경된 경합 상태를 방지합니다.

+0

그래서 파일을 생성하는 동시에 모드를 설정하지 않는 것이 좋습니다. – Chin

+0

일반적으로 umask를 존중해야하며,'open()'호출에서 모드를 설정할 수 있습니다. 특정'open()'호출을 위해 umask를 오버라이드하고 싶다면 별도의'fchmod()'호출을 사용하는 것이 더 낫습니다. – ninjalj

+0

설명을 주셔서 감사합니다, @ ninjalj. – Chin