我在内核中工作,我正在尝试进行系统调用,将分区作为输入(即/dev/sda1
),然后使用{{在文件系统上打印每个文件1}}。
我输入一个分区(即printk()
),然后在此系统调用中放入/dev/sda1
进行打印。
首先,我尝试使用流程执行此操作,因为如果我是对的,则每个流程都由printk()
表示,并且我尝试使用task_struct
访问这些文件。但问题是我只有打开文件的文件描述符而不是所有文件。
所以,我想要做的是我传递分区的名称,并files_struct
所有文件的名称。
例如:
我输入路径printk()
作为参数,假设我在此分区中有文件/dev/sda1
和a.txt
,因此系统调用应打印b.txt
和{ {1}}。
签名将如下:
a.txt
答案 0 :(得分:0)
有一些事情需要讨论。
系统调用的partition_name参数应具有__user标记。
如果你想严格来说,从分区读取文件,你必须实现文件系统识别(是分区ext3,reiserfs,ntfs,...?)然后为这种类型的驱动器实现驱动程序文件系统。正如基督所指出的,分区不包含文件,但文件系统却包含文件。另一种选择是使用已在该分区上为文件系统实现的驱动程序。这个选项太可怕了。
如果你想从文件系统中读取文件,你的工作会变得更容易,你可以使用VFS接口来访问它,但你需要安装该文件系统(你可以在运行中实现它) )。
我最后的意见是,我会更改“实现打印分区中每个文件的系统调用”,以“实现打印目录中每个文件的系统调用”。该系统调用的签名将是:
asmlinkage long sys_crazyness(__ user const char * dir);
我们不关心传递的目录是文件系统的根目录还是文件系统任何深度级别的文件夹。
如果您可以将问题更改为此问题,那将更容易;)