首页 > 解决方案 > 如何仅使用 open 和 read 系统调用来读取文件权限位?

问题描述

我可以使用系统调用检查文件的权限位stat(),该调用返回一个结构,其中包含一个字段,该字段又包含文件类型和模式。open有没有办法只使用和read系统调用来做同样的事情?即通过分析每一位?例如下面的代码读取一个文件(前四个字节)并确定它是否是一个 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;
}

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

标签: cpermissionssystem-calls

解决方案


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

使用stat是执行此操作的正确方法。


推荐阅读