gpt4 book ai didi

c - KLM 和用户空间中的文件

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

我记得在某个地方读过这个概念。我不记得在哪里。我有一个文件 file.c,它与我编译的其他文件以及一些其他文件一起作为供应用程序使用的库。

现在假设我编译同一个文件并使用内核模块构建它。因此,现在同一个文件对象同时存在于用户空间和内核空间中,它允许我在不调用系统调用的情况下访问内核数据结构。我的意思是我可以在库中拥有 api,应用程序可以通过它访问内核数据结构而无需系统调用。我不确定我是否可以将任何东西写入内核(我认为以这种方式不可能),但是以这种方式从内核读取一些数据结构会很好吗?

任何人都可以提供有关此方法的更多详细信息。我在谷歌中找不到任何关于此的内容。

最佳答案

我认为这是一种概念上有缺陷的方法,除非我误解了你在说什么。

如果我没理解错的话,你想要获取同一个文件并将其编译两次:一次作为模块,一次作为用户空间程序。然后你想同时运行它们,以便它们可以共享内存。

因此,显而易见的问题是,即使程序来自相同的源代码,它们仍将作为单独的可执行文件存在。该模块不会是它自己的进程:它只会在内核运行时被调用(即系统调用)。因此,就其本身而言,它不会让您逃脱系统调用废话。

更好的解决方案取决于您的目标:您是否只是想访问内核数据结构,因为您需要一些您通常无法获得的东西?或者,您是否关心性能并希望比系统调用更快地访问这些结构?

对于(1),可以创建字符设备或procfs文件。这两者都允许您的用户空间程序将它们肮脏的小手指伸入内核。

对于 (2),您处境艰难,问题变得更加棘手(也更加有趣)。要解决速度问题,这在很大程度上取决于您要提取的确切数据。

这有帮助吗?

关于c - KLM 和用户空间中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9961602/

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