Files
為什麼 open() 系統呼叫不會在 Ubuntu 中打開交換文件?
我有一個關於 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 使用者身份執行程式碼。這就是您收到“權限被拒絕”錯誤的原因。