組み込みアプリでいくつかの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ポインター変数が破損していないと確信しています。ヒープが破損している証拠は他に見たことがありません。