1

ここにあるコードを使用して、ディレクトリが空かどうかを確認しました。ただし、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;
 }
4

0 に答える 0