gpt4 book ai didi

linux - 如何在 Linux 中读取 VFS 属性

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:09 25 4
gpt4 key购买 nike

我有一些问题。

我尝试读取一些 VFS 属性,例如 struct super_block 中的 s_magic 值。但我看不懂 s_magic。

这是我的代码。

#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<linux/fs.h>
int main()
{
int fd;
char boot[1024];
struct super_block sb;
fd = open("/dev/fd", O_RDONLY);
read(fd, boot, 1024);
read(fd, &sb, sizeof(struct super_block);
printf("%x\n", sb.s_magic);
close(fd);

return 0;
}

因此,此代码因某些错误而无法正常工作。在此错误中,“sb”的存储大小未知,并且“sizeof”对不完整类型“struct super_block”的无效应用

谢谢。

最佳答案

那是因为你的 linux/fs.h不包含 super_block声明。那是因为你想包括 linux/fs.h来自 Linux kernel 但实际上包括 linux/fs.h来自 Linux 用户空间。供应-I <include path>像这样的 gcc 选项

gcc -I /usr/src/kernels/$(uname -r)/include

但是!

你会得到一百万个错误,因为你不能只在你的用户空间程序中包含内核头文件——你没有所有的类型和结构定义。

The kernel headers are not written with user space in mind, and they can change at any time. The proper way for user-space applications to interface with the kernel is by way of the C library, which provides its own structures and, when necessary, translates them into whatever the current kernel expects. This separation helps to keep user-space programs from breaking when the kernel changes.

(来源 http://lwn.net/Articles/113349/)

所以你必须修改你的代码。

附言我已经向您解释了为什么您的代码不起作用,但我不知道您如何在用户空间中读取 super_block。你最好再问一个关于文件系统 super block API 的问题。

关于linux - 如何在 Linux 中读取 VFS 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23979562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com