ここにあるコードを使用して、ディレクトリが空かどうかを確認しました。ただし、closedir() は Ubuntu でコア ダンプを引き起こすようです。理由はありますか?
ディレクトリが存在します。Opendir はハンドルを返し、readdir はそのハンドルを使用してディレクトリにアクセスでき、関数は本来の処理を実行します。ただし、ディレクトリを閉じようとすると、プログラムがエラーでクラッシュします
*** glibc が検出されました *** ./chelper: free(): 次のサイズが無効です (通常): 0x00000000017f10b0 ***
現時点での私の回避策は、ディレクトリを開いたままにしておくことです. 実行され、suid 部分を実行して終了します。開けたままにしておくのはちょっと嫌…
root@honecker:~/Project# uname -a Linux honecker 3.5.0-31-generic #52~precise1-Ubuntu SMP Fri May 17 15:27:06 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
/* Check if mount point is empty true=empty false=not empty */
int is_dir_empty(char *path) {
int c=0;
struct dirent *dent=NULL;
DIR *directory=NULL;
directory = opendir(path);
if (directory == NULL) {
perror(PNAME);
exit(1);
}
while ((dent = readdir(directory)) != NULL)
if (++c > 2)
break;
if (closedir(directory) == -1) {
perror(PNAME);
exit(1);
}
if (c <= 2)
return 1;
else
return 0;
}