![파일에 쓸 때 권한은 쓰기 전용입니다.](https://linux55.com/image/94918/%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%93%B8%20%EB%95%8C%20%EA%B6%8C%ED%95%9C%EC%9D%80%20%EC%93%B0%EA%B8%B0%20%EC%A0%84%EC%9A%A9%EC%9E%85%EB%8B%88%EB%8B%A4..png)
C에서 파일을 열고 다음 코드로 작성합니다.
int fd = open("soandso.txt", O_RDWR | O_CREAT);
write(fd, buf_of_data, 3);
이제 파일은 나에게만 쓰기 액세스 권한을 가집니다. 이는 내가 열기에서 지정한 권한이 아닙니다. 내가 뭘 잘못했나요?
답변1
이 값에 따라 파일 생성 권한이 수정됩니다 umask
.
예를 들면 다음과 같습니다.
$ umask
0022
$ touch xyz
$ ls -l xyz
-rw-r--r-- 1 sweh sweh 0 Sep 22 08:37 xyz
umask 값은 표준을 따릅니다.읽고 쓰기모드이므로 값은 다음과 같습니다.0022
삭제 ----w--w-
새로 생성된 파일에 대한 권한입니다.
우리는 이것을 변경할 수 있습니다:
$ umask 002
$ touch abc
$ ls -l abc
-rw-rw-r-- 1 sweh sweh 0 Sep 22 08:38 abc
이제 002 마스크만 제거되었습니다-------w-
차단되지 않은 파일 만들기
$ umask 0
$ touch def
$ ls -l def
-rw-rw-rw- 1 sweh sweh 0 Sep 22 08:40 def
프로그램에서 값을 무시하도록 하려면 호출하기 전에 함수를 명시적으로 호출 umask
해야 합니다.umask(2)
open(2)
open(2)
플래그와 함께 사용할 경우 O_CREAT
권한도 전달해야 합니다.모델. 예를 들어
open("myfile",O_CREAT|O_RDWR,0666);
이 경우 스키마 필드도 값에 따라 수정되므로 umask
생성된 실제 스키마는 입니다 (mode & ~umask)
.