2012-09-19 2 views
0

오픈 시스템 호출을 사용하여 전체 권한 (777)으로 파일을 생성하고 있습니다.하지만 ls -li는 (755) 권한 만 볼 수 있습니다. 이유는 무엇입니까? 허가는 777이 아니야?공개 시스템 호출에서 파일 사용 권한 문제 linux

코드

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

int main() 
{ 
     int fd; 

     /* Creates a file with full permission*/ 
     fd = open("test",O_CREAT | O_RDWR |O_APPEND ,0777); 

     if(fd= -1) 
     { 
       return -1; 
     } 

     close(fd); 
} 

출력 시스템에 의해 유지되는 값이 umask라는있다

 $ ls -l 
    -rwxr-xr-x 1 ubuntu ubuntu 0 2012-09-19 11:55 test 
+2

'umask'와 관련이 있습니다. 예 : http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html –

답변

4

; 이것은 PID (프로세스 ID) 또는 EUID (유효 사용자 ID)와 마찬가지로 프로세스의 속성입니다. 022 (8 진수)으로 설정됩니다. 이는 시스템이 작성된 파일에서 그룹 및 기타 쓰기 권한을 제거해야 함을 나타냅니다.

open()을 사용하기 전에 umask(0);으로 전화하여 open()에 지정한 모드가 변경되지 않도록 할 수 있습니다. umask이 문제임을 입증하려면 반드시이를 수행해야합니다. 그러나, 일반적으로 사용자의 선택을 허용하도록하는 것이 가장 좋습니다. 프로그램이 내 umask 설정을 따르지 않으면 프로그램을 매우 잘 만듭니다. 문제를 확인하고 확인한 후에 다시 사용하지 않는 경향이 있습니다.

셸에는 사용할 수있는 (내장형) 명령 umask도 있습니다. 022 값은 적절한 기본값입니다. 대부분의 경우 파일에 누군가를 쓰는 것을 원하지 않습니다.

2

생성 된 파일의 사용 권한은 프로세스의 현재 umask에 의해 제한됩니다. 현재 umask022이므로 그룹 및 글 쓰기는 기본적으로 항상 사용되지 않습니다. (대부분 좋은 경우입니다.) 그룹 및 세계 기록 가능한 파일이 정말로 필요한 경우이 파일을 생성하는 동안 임시로 umask(0)을 설정해야합니다 (시스템 호출에서 반환 된 이전 값을 저장하고, 나중에 다시 설정하십시오!) 또는 chmod()을 사용하여 파일 사용 권한을 "수동으로"설정하십시오.