gpt4 book ai didi

c - 使用系统调用打印文件系统上的所有文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:41 25 4
gpt4 key购买 nike

我在内核中工作,我正在尝试进行系统调用,将分区作为输入(即 /dev/sda1),然后打印每个 文件在文件系统上使用 printk()。我进入一个分区(即 /dev/sda1),然后在这个系统调用中放置一个 printk() 以进行打印。

首先,我尝试用一​​个进程来做到这一点,因为如果我是对的,每个进程都由一个 task_struct 表示,我尝试使用 files_struct 访问文件.但问题是我只有打开文件的文件描述符,而不是所有文件。

所以,我想做的是传递分区的名称,然后 printk() 所有文件的名称。


例如:

我输入路径 /dev/sda1 作为参数,假设我有文件 a.txtb.txt这个分区,所以系统调用应该打印 a.txtb.txt

签名会是这样的:

asmlinkage long sys_acall(char *partition_name);

最佳答案

有几件事需要讨论。

  • 系统调用的 partition_name 参数应该有 __user 标签。

  • 严格来说,如果你想从一个分区读取文件,你必须实现文件系统识别(那个分区是 ext3、reiserfs、ntfs ......?),然后实现这种类型的驱动程序文件系统。正如 Christ 指出的那样,分区不包含文件,但文件系统包含文件。另一种选择是使用已经为该分区上的文件系统实现的驱动程序。这个选项太可怕了。

  • 如果你想从一个文件系统中读取文件,你的工作会变得更容易,你可以使用 VFS 接口(interface)来访问它,但你需要挂载该文​​件系统(你可以即时完成).

我的最终意见是,我会将“实现一个打印分区中每个文件的系统调用”更改为“实现一个打印目录中每个文件的系统调用”。该系统调用的签名为:

asmlinkage long sys_crazyness(__user const char *dir);

我们不关心传递的目录是文件系统的根目录还是文件系统任何深度级别的文件夹。

如果你能把你的问题改成这个,那就容易多了;)

关于c - 使用系统调用打印文件系统上的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609557/

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