Ubuntu에서 open() 시스템이 스왑 파일 열기를 호출하지 않는 이유는 무엇입니까?

Ubuntu에서 open() 시스템이 스왑 파일 열기를 호출하지 않는 이유는 무엇입니까?

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출력에 표시되는 내용입니다.

파일의 소유자는 루트이며 루트가 아닌 사용자로 코드를 실행하고 있습니다. 이것이 "권한 거부" 오류가 발생하는 이유입니다.

관련 정보