【问题标题】:Are simple C file operation functions like getc, putc and seek available in the Linux kernel?Linux内核中是否有getc、putc、seek等简单的C文件操作函数?
【发布时间】:2012-02-27 10:31:45
【问题描述】:

我将编写一个词法,它将成为内核模块的一部分,我将在其中解析文件并返回令牌。为此,我可能需要使用像 fopen、getc、putc、fseek 等显然是用户空间函数的函数。我已经在内核空间中搜索了这些函数的替代方案,我发现了像 open、filp​​_open、sys_open 等我想对我来说没问题的函数。但是我想知道getc、putc、seek等函数(在文件操作中可以很方便)在内核空间中是否可用?

【问题讨论】:

  • 你为什么要把它放到内核中?
  • 我认为 open 是一个系统调用。
  • 也许你应该看看其他模块解决方案。对我来说,在内核中解析文件之类的任务听起来不是一个好的解决方案。你不应该在里面放任何不需要内核功能的东西。也许你应该把它设计成一个模块和一个用户空间程序来解析配置并将其交给模块。
  • @JewelThief 在这种情况下,添加一个已定义 API 的系统调用,并编写一个用户区代理将配置文件转换为正确的按钮推送。用户空间存在是有原因的。
  • 或者,通过 sysfs 文件系统公开配置旋钮。

标签: c linux kernel


【解决方案1】:

不要。

读取文件,尤其是复杂的配置文件,不应该从内核中完成。

有很多关于为什么这是一个坏主意的信息。 The KernelNewbies FAQ 是一个好的开始。

真的,真的不要这样做。我集成了很多供应商(内核)代码,这是不断出现并困扰我们的错误之一。从一开始就学会以正确的方式做事。

【讨论】:

  • 因此,在某人(...拥有数十年内核经验...)结束该参考并得出结论认为,对于他们的嵌入式产品,唯一的“它”方法就是忽略“不要”的建议,这是怎么发生的?不用担心——我可以阅读源代码。我只是厌倦了像“不要”这样的答案。一点帮助都没有。我会否决你的答案,但我太忙了,无法点击“拒绝”按钮......
  • 看,我同意有时它是必需的(例如 NFS 服务器),但我也认为您同意“不要”实际上是 Jewel Thief 需要听到的答案。我会添加一个简短描述的链接,但任何真正确实需要它的人都会在 5 分钟内找到它,它只会鼓励那些无论如何都不应该这样做的人去做。
  • 不,我不同意“不”是这里的正确答案,因为这听起来太像我们是一群试图阻止 OP 破坏他们的机器的保姆。你说“不要”的理由是可以的,因为我们可以在 5 分钟内找到它,这有点精英主义的味道。好吧,如果我不想花 5 或 10 或 20 或 ... 分钟来挖掘它,我是“精英”之一,因为我真的是 - 我的第一个 UNIX 内核在 1981 年工作吗? .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 2012-07-02
  • 1970-01-01
  • 2018-05-29
  • 2021-05-21
相关资源
最近更新 更多