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은 비실행 파일에 적합합니다.

관련 정보