gpt4 book ai didi

linux - 嵌入式 linux : readdir() sometimes failing with EFAULT

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:27 24 4
gpt4 key购买 nike

我在嵌入式应用程序中遇到了一些 readdir() 问题,因此我在应用程序代码的方便位置添加了这个自包含测试:

FILE *f;
DIR *d;

f = fopen ("/mnt/mydir/myfile", "r");
printf ("fopen %p\r\n", f);
if (f) fclose(f);

d = opendir ("/mnt/mydir");
printf ("opendir ret %p\r\n", f);
if (d)
{
struct dirent *entry;
do
{
errno = 0;
entry = readdir (d);
printf ("readdir ret %p %s, errno %d %s\r\n", entry, entry ? entry->d_name : "", errno, strerror(errno));
} while (entry);
closedir (d);
}

/mnt/mydir 是一个 NFS 挂载(尽管我不确定这是否相关)。在该目录中打开文件的 fopen() 调用总是成功,并且在该目录上的 opendir() 也总是成功。然而,有时(大多数)readdir() 会因 errno=EFAULT 而失败。

我不相信应用程序中的其他任何地方都在用那个目录做任何事情。测试与编写的完全一致,所有变量都是局部堆栈范围。

如果我将它作为独立程序运行,它总是会成功。

任何人都可以就可能导致 EFAULT 的原因提供任何建议吗?我很确定我的 DIR 指针变量没有被破坏,尽管我猜 DIR 结构本身可能被破坏了。我在其他地方没有看到任何堆损坏的证据。

最佳答案

来自 man 2 readdir 页面:

       EFAULT Argument points outside the calling process's address space.

这意味着您的结构已损坏

关于linux - 嵌入式 linux : readdir() sometimes failing with EFAULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14872705/

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