【问题标题】:Create system call function创建系统调用函数
【发布时间】:2021-05-08 15:36:44
【问题描述】:

我需要创建一个系统调用函数来获取目录的所有子文件夹。但是,我没有任何想法这样做。你能给我一些关键字或建议来实现它吗?

asmlinkage long sys_get_child_folder(char* path, char** child_folder);

【问题讨论】:

  • 堆栈溢出对于从哪里开始的问题来说是一个糟糕的地方。你任务的哪一部分对你来说是个问题?如果您想知道如何在 Linux 内核中迭代文件,请查看该问题:stackoverflow.com/questions/29458157/…

标签: linux-kernel system-calls


【解决方案1】:

I'm smelling a XY problem;您要解决的实际问题是什么?

您为什么要为此创建一个新的系统调用?只需打开目录,枚举其所有条目并过滤掉那些不是目录 inode 的条目。执行此操作的规范方法是使用 opendir 函数。 https://linux.die.net/man/3/opendir


另外请记住,如果您编写的代码应该在内核中运行,请注意,从内核内部很难使用常用的文件系统机制。原因是文件系统产生命名空间,这取决于任务上下文;从内核中访问文件的唯一可靠方法是让用户空间进程打开它们,然后将文件描述符交给一些内核代码。但强烈建议不要这样做。

【讨论】:

  • 我尝试做一个系统调用函数,比如cs.albany.edu/~sdc/CSI500/Fal13/Labs/OwnSyscallV3plus/…
  • @ThànhTrần:是的,你告诉我们的。问题是为什么要进行系统调用?为什么不使用您随时可用于用户空间的功能?您要解决的问题是什么,迫使您在内核空间内执行此操作?
  • @ThànhTrần:在我看来,这是你老师提出的一个非常糟糕的额外问题:首先,这表明你的老师不理解文件系统访问需要了解所谓的“任务结构”以及它如何创建挂载名称空间。它还指出了一个问题,该问题已经广泛存在适当的解决方案,因此学生很可能只是进行盲目的复制和粘贴。无论如何,这是 Linux 已经作为读取目录系统调用提供的特定实现:elixir.bootlin.com/linux/latest/source/fs/readdir.c
  • @ThànhTrần:本质上,您的老师提出的问题是希望您在 Linux 内核中实现 readdir.c 已经完成的所有事情,以及 Linux VFS 中的一些其他事情。跨度>
  • @dataworf 哦,谢谢,非常感谢您的帮助。你能再帮我解决一个问题吗?能否获取内核内一个路径的最后一个访问子文件夹?
猜你喜欢
  • 1970-01-01
  • 2011-02-09
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
相关资源
最近更新 更多