파일을 삭제하면 실제로 파일에 대한 링크 (아이 노드)가 제거됩니다. 누군가 이미 해당 파일을 열어 놓은 경우 파일 설명자를 유지합니다. 파일은 디스크에 남아있어 공간을 차지하며 파일에 액세스 할 수 있으면 쓰거나 읽을 수 있습니다.
unlink
기능은 POSIX하여이 동작으로 정의된다 :
파일의 링크 수가 0이되고 프로세스가 파일을 열지 않은 경우 파일이 차지하는 공간을 비우고 파일에 더 이상 액세스 할 수 없게됩니다. 마지막 링크가 제거 될 때 하나 이상의 프로세스가 파일을 연 경우 unlink ()가 리턴되기 전에 링크가 제거되지만 파일에 대한 모든 참조가 닫힐 때까지 파일 컨텐츠 제거가 연기 됩니다.
그 행동으로 인해이 조언. 데몬은 파일을 열어 놓았으며 파일이 삭제되었음을 알지 못합니다 (특별히 모니터링하지 않는 한 드문 경우). 기존 파일 디스크립터에 계속 쓸 수 있습니다. 디스크의 공간을 계속 차지하지만 작성하는 메시지를 볼 수 없으므로 실제로 최악의 상태입니다. 두 세계의. 대신 파일을 길이가 0으로 자르면 공간이 즉시 비워지고 파일을 볼 수있는 새 메시지 끝에 새 메시지가 추가됩니다.
결국, 데몬이 종료되거나 close
파일 을 사용하면 공간이 비워집니다. 그 어느 누구도 그 동안 파일을 열 수 없습니다 ( Linux/proc/x/fd/...
와 같은 시스템 고유의 반사 인터페이스를 통해서 는 제외). 또한 다음을 보장합니다.
파일의 링크 카운트가 0 인 경우, 파일과 연관된 모든 파일 디스크립터가 닫히면 파일이 차지하는 공간이 비워지고 파일에 더 이상 액세스 할 수 없게됩니다.
따라서 디스크 공간을 영구적으로 잃지 않지만 파일을 삭제해도 아무런 효과가 없으며 새 메시지에 액세스 할 수 없습니다.
/proc/x/fd/y
어떻게됩니까? 프로세스가 파일 디스크립터에 쓰지 못하게됩니까, 아니면 잘못된 조작입니까?