시스템 호출 "open" 모드가 작동하지 않습니다.

시스템 호출 "open" 모드가 작동하지 않습니다.

나는 플래그가 있는 파일을 여는 것에 대한 간단한 코드를 작성하고 있습니다 O_CREAT | O_WDONLY | O_EXCL. 코드는 다음과 같습니다.

int fd = open(fileName, O_WRONLY | O_CREAT | O_EXCL, 0777);

모드(권한) 부분을 제외하고는 잘 작동합니다. 다른 섹션에 무엇을 넣든 항상 r-x.

예를 들어, 위 코드에서 생성된 파일의 권한은 다음과 같습니다.

rwxrwxr-x.

그렇지 않나요 777? 내가 무엇을 놓치고 있나요?

답변1

~에umask파일이 생성되면 현재 프로세스에 대한 정보가 삭제됩니다. 이 경우에는 umask가 (세계가 기록되지 않은) 것처럼 보입니다 0002. 부르다umask()전화 open()해서 바꾸기 전에.

Soapbox: 다음이 아닌 이상 누구나 쓰기 가능한 파일을 생성하지 마십시오.진짜물론 그것이 당신이 원하는 것입니다. umask이러한 취약점으로부터 귀하와 귀하의 사용자를 보호하기 위해 존재합니다.

관련 정보