如何仅使用 open 和 read 系统调用读取文件权限位?
How to read file permission bits using only the open and read system calls?
我可以使用 stat()
系统调用检查文件的权限位,其中 returns 一个结构,其中包含一个字段,该字段又包含文件类型和模式。有没有办法只使用 open
和 read
系统调用来做同样的事情? 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;
}
是否有类似的方法来读取文件以逐位提取信息?
文件权限不是文件内容的一部分,而是其目录条目的一部分,因此您无法使用文件上的 open
或 read
读取权限。
使用 stat
是正确的方法。
我看到你在另一条评论中提到你这样做只是为了学习目的。任何其他阅读此内容以进行生产工作的人……不要。它将是不可携带的!您可能只想在包含目录上使用 stat
。
您需要查看 stat
函数的系统定义。 Here 是 stat 函数实现的一个示例。绝对不是调用stat
那么简单。但是,如果您研究这个来源并点击其中的链接,您就会了解它是如何工作的。
不幸的是,我很清醒,没有去研究来源,我不确定是否可以仅通过 open
和 read
的组合来完成。不过我的猜测是否定的(只是猜测)
我可以使用 stat()
系统调用检查文件的权限位,其中 returns 一个结构,其中包含一个字段,该字段又包含文件类型和模式。有没有办法只使用 open
和 read
系统调用来做同样的事情? 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;
}
是否有类似的方法来读取文件以逐位提取信息?
文件权限不是文件内容的一部分,而是其目录条目的一部分,因此您无法使用文件上的 open
或 read
读取权限。
使用 stat
是正确的方法。
我看到你在另一条评论中提到你这样做只是为了学习目的。任何其他阅读此内容以进行生产工作的人……不要。它将是不可携带的!您可能只想在包含目录上使用 stat
。
您需要查看 stat
函数的系统定义。 Here 是 stat 函数实现的一个示例。绝对不是调用stat
那么简单。但是,如果您研究这个来源并点击其中的链接,您就会了解它是如何工作的。
不幸的是,我很清醒,没有去研究来源,我不确定是否可以仅通过 open
和 read
的组合来完成。不过我的猜测是否定的(只是猜测)