gpt4 book ai didi

c - Linux 内核模块文件关闭不太正确

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

这段代码有一个小问题。我不明白为什么它不起作用。

static int test(const char *path)
{
struct file *filp;
filp = filp_open(path, O_RDONLY, 0);
if (IS_ERR(filp))
return filp;
// some code (only read from filp (like inode and stuff))
filp_close(filp, NULL);
}

当我使用此代码段一次或两次甚至一千次时,它可以正常工作,但在大约 63000 次后我遇到错误 -23,此后无法打开单个文件。我查看了打开和关闭的系统调用,这些使用了 filp_open/filp_close,但我无法弄清楚这段代码有什么问题。一定是文件描述符没有被释放,但为什么呢?

最佳答案

试试这个:

mm_segment_t  st_old_fs;      
st_old_fs = get_fs();
set_fs(get_ds());

struct file *filp;
filp = file_open(path, O_RDONLY, 0);
if (IS_ERR(filp))
{
set_fs(st_old_fs);
return filp;
}
// some code (only read from filp (like inode and stuff))
filp_close(filp, NULL);

set_fs(st_old_fs);

内核对文件有一些特殊的内存管理方式。所以你需要保存旧的方式并在使用 file_open 后恢复它。

关于c - Linux 内核模块文件关闭不太正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44578473/

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