You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux内核模块中Proc文件/目录创建与删除的问题求助

Linux内核模块中Proc文件/目录创建与删除的问题求助

我正在为课程作业编写一个Linux内核模块,遇到了一些令人困惑的问题。

首先,模块会在/proc/下创建一个文件夹,然后在该文件夹下创建一个文件/proc/folder/file。实现代码大致如下:

static struct proc_dir_entry* parent;
static struct proc_dir_entry* file;
// ...
int __init mod_init(void) {
     parent = proc_mkdir("folder", NULL);
     if(parent == NULL) {
         return -ENOMEM;
     }
     file = proc_create("file", 0666, parent, &fops);
     if(file == NULL) {
         return -ENOMEM;
     }
     pr_info("Module insertion successful.\n");
     return 0;
}

现在模块遇到了几个问题:

  • 首先,如果目标文件或文件夹已经存在,模块会返回-ENOMEM,提示因无法分配内存导致插入失败。我希望能够区分“实际无法创建proc文件指针”和“无法覆盖已有文件/目录”这两种不同的错误场景,想知道该如何实现。
  • 然后,我在卸载模块时尝试删除创建的文件和文件夹,代码如下:
void __exit mod_exit(void) {
    proc_remove(file);
    proc_remove(folder);
}
// (之后我绑定了加载/卸载函数)

假设之前的模块加载代码正常工作,这个卸载函数执行时没有报错,但它只删除了子文件,并没有删除对应的文件夹,导致/proc/下仍然保留着folder目录,这和我的预期不符。

TL;DR:

  • 如何覆盖已存在的proc文件,同时仍能正确检查文件创建失败的情况?
  • 如何删除proc文件夹,我哪里做错了?

大部分其他代码都是通用的模板,已经能正常工作,而且和我的作业细节相关。我就是搞不定这部分,网上找的文档都没覆盖这个特定问题(或者谷歌搜不到)。

编辑补充:
我忘了提,当proc_mkdir返回NULL时,用parent作为父目录调用proc_create自然也无法工作。有没有办法直接获取已有文件夹的指针?

我使用的内核版本是6.8.0-48-generic,系统是Ubuntu 20.04 LTS。

备注:内容来源于stack exchange,提问作者opl23590

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:28:03