Files

為什麼 open() 系統呼叫不會在 Ubuntu 中打開交換文件?

  • January 10, 2021

我有一個關於 open() 系統呼叫的問題。我正在編寫一個 C 程式碼,我需要在其中以只讀模式打開提供的目錄中的所有文件。在 open 呼叫之前,我檢查使用者是否具有對該文件的讀取權限。雖然當提供的目錄是 時/,那裡的文件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

您正在嘗試以非 root 使用者身份打開文件。

文件的權限允許文件的所有者打開它以進行讀取(和寫入),並拒絕對該組和“其他人”的任何形式的訪問。這就是您的ls -l輸出顯示的內容。

該文件的所有者是 root 使用者,您正在以非 root 使用者身份執行程式碼。這就是您收到“權限被拒絕”錯誤的原因。

引用自:https://unix.stackexchange.com/questions/628450