我想使用POSIX scandir()
以遞歸方式將一個目錄複製到另一個目錄(如cp -R
)。使用scandir打開每個文件但不鏈接到其他目錄()
問題是,當我複製/ sys/bus /等包含更高級別鏈接的目錄時(例如:foo/foo1/foo2/foo/foo1/foo2/foo/...),系統進入循環狀態並將目錄「在中間」永久地複製...
如何檢查我用dirent打開的文件是否爲鏈接?
我想使用POSIX scandir()
以遞歸方式將一個目錄複製到另一個目錄(如cp -R
)。使用scandir打開每個文件但不鏈接到其他目錄()
問題是,當我複製/ sys/bus /等包含更高級別鏈接的目錄時(例如:foo/foo1/foo2/foo/foo1/foo2/foo/...),系統進入循環狀態並將目錄「在中間」永久地複製...
如何檢查我用dirent打開的文件是否爲鏈接?
看看這個:How to check whether two file names point to the same physical file
您需要存儲已訪問,以確保你沒有得到任何重複的inode的列表。如果你有兩個硬鏈接到同一個文件,沒有「一個」規範名稱。一種可能性是首先存儲所有文件,然後遞歸遍歷所有文件名。您可以將路徑結構與inode和文件內容分開存儲。
我的回答已經很晚了,但我只想說你解決了我的問題!非常感謝! –
*我嘗試了S_ISLINK,但它不起作用 - Black27 *。見http://stackoverflow.com/questions/8875663/is-there-any-posix-way-through-fstat-to-check-whether-a-file-is-a-symbolic-lin – dirkgently
你想停止在符號鏈接,或避免週期? – slezica