如何仅使用 open 和 read 系统调用读取文件权限位?

How to read file permission bits using only the open and read system calls?

我可以使用 stat() 系统调用检查文件的权限位,其中 returns 一个结构,其中包含一个字段,该字段又包含文件类型和模式。有没有办法只使用 openread 系统调用来做同样的事情? IE。通过分析每一位?例如下面的代码读取一个文件(前四个字节)并确定它是否是一个 ELF 文件..

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>

int main(int argc, char *argv[])
{
    int fd = open("main", O_RDONLY);

    char *buf = malloc(sizeof (char) * 4);

    read (fd, buf, 4);

    if (strcmp(buf, "ELF"))
        printf("It is an ELF file.\n");
    free(buf);

    return 0;
}

是否有类似的方法来读取文件以逐位提取信息?

文件权限不是文件内容的一部分,而是其目录条目的一部分,因此您无法使用文件上的 openread 读取权限。

使用 stat 是正确的方法。

我看到你在另一条评论中提到你这样做只是为了学习目的。任何其他阅读此内容以进行生产工作的人……不要。它将是不可携带的!您可能只想在包含目录上使用 stat

您需要查看 stat 函数的系统定义。 Here 是 stat 函数实现的一个示例。绝对不是调用stat那么简单。但是,如果您研究这个来源并点击其中的链接,您就会了解它是如何工作的。

不幸的是,我很清醒,没有去研究来源,我不确定是否可以仅通过 openread 的组合来完成。不过我的猜测是否定的(只是猜测)