2013-03-11 85 views

回答

1

從手冊頁之間的連結:

When the utility is called as unlink, only one argument, 
which must not be a directory, may be supplied. 

因此,在使用時取消鏈接,你不能將目錄作爲參數。

+0

當談到Unix文件系統爲什麼只允許指向文件的鏈接而不是目錄時,'計算機系統設計原理'給出了一個取消鏈接目錄的例子,它在第100頁。如果這個例子不合適,有沒有更好的解釋? – stonestrong 2013-03-11 13:11:05

4

unlink(2)只能刪除一個文件,而rmdir(2)只能刪除空目錄。

如果要遞歸刪除目錄,則必須智能地使用兩個系統調用。您可能會發現許多不同的遞歸刪除實現,例如this one正在使用nftw,或者this one正在使用opendir/readdir

+0

假設我們有「a/b/c」,並且還有另一個「d/e」,其中e是c的硬鏈接,如果我們刪除目錄a及其子內容,那麼e指向的是無效的? – stonestrong 2013-03-11 13:04:27

+0

我提到「計算機系統設計原理」,在這種情況下,e最終會成爲一個不具有破壞性的懸掛參考。 – stonestrong 2013-03-11 13:34:01

+2

@stonestrong如果它是一個/符號/鏈接,它將以懸掛引用結束,但/ hardlink /將導致該文件的使用計數仍爲1,因此文件仍然存在。你可以自己試試這個:'mkdir -p a/b; echo你好,世界\! > a/b/c; mkdir d; ln -s ../a/b/c d/e; ln a/b/c d/f; rm -rf a; cat d/e;貓d/f' – RolKau 2013-11-13 13:04:22