我最近开始使用系统编程,并想知道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?!)。