open() 시스템 호출에 대해 질문이 있습니다. 읽기 전용 모드로 제공된 디렉터리의 모든 파일을 열어야 하는 C 코드를 작성 중입니다. 공개 통화 전에 사용자에게 파일에 대한 읽기 권한이 있는지 확인합니다. 제공된 디렉터리가 이면 /
그 안의 파일을 swapfile
열 수 없고 시스템 호출이 실패하더라도 사용자에게는 읽기 권한이 있습니다.
왜 이런 일이 발생하는지 또는 해결 방법을 알려주실 수 있나요?
아래에서 볼 수 있듯이 사용자에게 읽기 권한이 있으므로 파일이 열려 있어야 합니다.
-rw------- 1 root root 2147483648 Οκτ 22 18:58 swapfile
오류를 일으키는 코드:
int fd = open(path, O_RDONLY);
if (fd == -1)
{
perror("open");
exit(1);
}
실수:
open: Permission denied
답변1
루트가 아닌 사용자로 파일을 열려고 합니다.
파일 권한을 통해 파일 소유자는 파일을 읽고 쓰기 위해 열 수 있으며 그룹 및 "기타"에 대한 모든 종류의 액세스를 거부할 수 있습니다. 이것이 ls -l
출력에 표시되는 내용입니다.
파일의 소유자는 루트이며 루트가 아닌 사용자로 코드를 실행하고 있습니다. 이것이 "권한 거부" 오류가 발생하는 이유입니다.