rmdir(시스템 호출)이 빈 디렉토리에서만 작동하는 이유는 무엇입니까?

rmdir(시스템 호출)이 빈 디렉토리에서만 작동하는 이유는 무엇입니까?

상위 inode에서 디렉토리의 링크를 자동으로 해제할 수 있는 방법이 없습니까? 여기에는 역사적 이유가 있나요?

답변1

int rmdir(const char *pathname);

시스템 호출, POSIX.1-2001을 준수합니다. 이제 단일 디렉터리뿐만 아니라 그 안에 있는 모든 하위 디렉터리와 파일을 삭제하도록 이 시스템 호출을 원하는 상황을 상상해 보세요.

  1. 이 논리를 커널에 추가해야 하는데 이는 쉬운 작업이 아니며 그렇게 하면 커널이 부풀어오르게 됩니다.
  2. 실행 시간 측면에서 작업이 정의되지 않습니다.
  3. 커널에서는 그다지 의미가 없는 처리가 실패할 수 있는 방법이 많이 있습니다.

답변2

이것은 버그가 아닌 기능입니다!

rmdir *를 사용하여 비어 있지 않은 디렉토리를 유지하면서 빈 디렉토리를 쉽게 삭제할 수 있습니다 . 이것은 제가 자주 사용하는 시스템 관리 방법입니다.

rm -rf전체 디렉터리 트리(모든 파일 및 하위 디렉터리)가 삭제 됩니다 .

관련 정보