1

我使用此处找到的一段代码来检查目录是否为空。但是, 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;
 }
4

0 回答 0