【问题标题】:How to read file permission bits using only the open and read system calls?如何仅使用 open 和 read 系统调用来读取文件权限位?
【发布时间】:2020-12-23 14:59:31
【问题描述】:

我可以使用stat() 系统调用检查文件的权限位,它返回一个结构,其中包含一个字段,该字段又包含文件类型和模式。除了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;
}

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

【问题讨论】:

    标签: c permissions system-calls


    【解决方案1】:

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

    使用stat 是正确的方法。

    【讨论】:

    • 我想直接检查这些位,即如果权限是 Dir 条目的一部分,那么没有办法直接读取吗?任何有用的资源都会有帮助,我找不到任何。
    • @debdut 如果您尝试将目录作为文件读取,您可能会这样做,但您会得到与 stat 相同的值,并且该进程将是文件系统具体的。为什么要这样做?
    • 以这种方式检查它有助于我理解这个概念。仅供学习之用。
    【解决方案2】:

    我看到你在另一条评论中提到你这样做只是为了学习目的。其他任何人都在为生产工作阅读这篇文章......不要。它将是非便携式的!您可能只想在包含目录上使用stat

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-21
      • 2014-01-03
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 2013-11-27
      • 1970-01-01
      相关资源
      最近更新 更多