当使用内核iterate_dir

时间:2017-06-15 20:56:06

标签: c linux kernel-module

我最近开始使用系统编程,并想知道iterate_dir是如何工作的。

我写了一些内容,但我无法弄清楚为什么会出错。 我的代码在大约190k-210k迭代时开始失败。

struct dir_context context2 = { actor2, 0 };

for (i = 0; i < 1000000; i++)
{
    file = filp_open("/", O_RDONLY, 0);
    if (IS_ERR(file))
    {
        printk(KERN_ALERT "ERR: %d", file);
        break;
    }
    if (iterate_dir(file, &context2))
    {
        printk(KERN_ALERT "iterate_dir failed");
        break;
    }
    filp_close(file, 0);
}

错误总是相同23(ENFILE,文件表溢出),但是我打开并关闭了文件,而actor2什么也没做。有时会打印vfs file-max limit xxx reached

static int actor2(struct dir_context *ctx, const char *name, int namlen, loff_t offset, u64 ino, unsigned int d_type)
{
    return 0;
}

或许我必须关闭actor2里面的文件(但是没有filep?!)。

0 个答案:

没有答案