rmdir(システムコール)が空のディレクトリでのみ機能するのはなぜですか?

rmdir(システムコール)が空のディレクトリでのみ機能するのはなぜですか?

親inodeでディレクトリへのリンクを自動的に無効にする方法はありませんか?ここに歴史的な理由はありますか?

答え1

int rmdir(const char *pathname);

システムコール、POSIX.1-2001に準拠しています。これで、単一のディレクトリだけでなく、その中にあるすべてのサブディレクトリとファイルを削除するようにこのシステムコールを希望する状況を想像してみてください。

  1. このロジックをカーネルに追加する必要がありますが、これは簡単な作業ではなく、そうするとカーネルが膨らみます。
  2. 実行時間に関して、ジョブは定義されていません。
  3. カーネルにはあま​​り意味のない処理が失敗することができる方法がたくさんあります。

答え2

これはバグではなく機能です!

rmdir *を使用すると、空でないディレクトリを維持しながら、空のディレクトリを簡単に削除できます。これは私がよく使うシステム管理方法です。

rm -rf完全なディレクトリツリー(すべてのファイルとサブディレクトリ)が削除されます。

関連情報