umask() 시스템 호출을 사용하여 권한을 차단하는 방법

umask() 시스템 호출을 사용하여 권한을 차단하는 방법

umask()파일 권한을 설정하기 위해 시스템 호출을 사용하고 있습니다 . 다음 코드를 사용하고 있습니다.

umask(S_IWGRP | S_IWOTH);
printf("Enter file name that you want to create:");
scanf(" %s",file);
fd = open(file,O_CREAT|O_WRONLY);

하지만 실행 후에는 아래와 같은 권한으로 파일이 생성됩니다.

--wS-----T 1 rvi rvi     0 Oct  2 15:20 test.txt

S이 작은 것은 무엇을 T위한 것인가요? 왜 자동으로 수정되나요?

답변1

O_CREAT로 open을 호출하면 파일 모드를 나타내는 세 번째 매개변수가 필요합니다. 그러면 umask는 요청한 모드에서 마스크됩니다. 예를 들면 다음과 같습니다.

umask(S_IWGRP | S_IWOTH /* == 0022 */);
fd = open(file, O_CREAT|O_WRONLY, 0777);

플래그 0777 & (~0022) = 0755, 즉 rwxr-xr-x를 사용하여 파일을 생성합니다.

umask(S_IWGRP | S_IWOTH);
fd = open(file, O_CREAT|O_WRONLY, 0666);

플래그 0666 & (~0022) = 0644(rw-r--r--)를 사용하여 파일이 생성됩니다. 귀하의 경우 모드 인수를 제공하지 않기 때문에 open 함수는 스택에서 임의의 데이터를 가져오므로 umask로 마스크된 비트가 꺼진다는 것만 알 수 있습니다. 원하는 모드로 공개 호출을 제공해보세요. 0777은 실행 파일에 적합하고, 0666은 비실행 파일에 적합합니다.

관련 정보