为什么 open() 系统调用无法在 Ubuntu 中打开交换文件?

为什么 open() 系统调用无法在 Ubuntu 中打开交换文件?

我有一个关于 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

您正尝试以非 root 用户身份打开该文件。

文件的权限允许文件的所有者打开它进行读取(和写入),并拒绝对组和“其他人”进行任何类型的访问。这就是您的ls -l输出所显示的内容。

该文件的所有者是 root 用户,而您以非 root 用户身份执行代码。这就是您收到“权限被拒绝”错误的原因。

相关内容