我使用此处找到的一段代码来检查目录是否为空。但是, closedir() 似乎会导致 Ubuntu 上的核心转储。任何想法为什么?
目录存在。Opendir 返回一个句柄,readdir 能够使用该句柄访问目录,并且该函数执行它应该执行的操作。但是,当我尝试关闭目录时,程序崩溃并出现错误
*** 检测到 glibc *** ./chelper: free(): 下一个大小无效(正常):0x00000000017f10b0 ***
我目前的解决方法是让目录保持打开状态,因为这只是一个帮助kludge来做更大的事情的一部分。它运行,执行 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;
}