2012-05-21 45 views
4

我想使用POSIX scandir()以遞歸方式將一個目錄複製到另一個目錄(如cp -R)。使用scandir打開每個文件但不鏈接到其他目錄()

問題是,當我複製/ sys/bus /等包含更高級別鏈接的目錄時(例如:foo/foo1/foo2/foo/foo1/foo2/foo/...),系統進入循環狀態並將目錄「在中間」永久地複製...

如何檢查我用dirent打開的文件是否爲鏈接?

+1

*我嘗試了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

+0

你想停止在符號鏈接,或避免週期? – slezica

回答

1

看看這個:How to check whether two file names point to the same physical file

您需要存儲已訪問,以確保你沒有得到任何重複的inode的列表。如果你有兩個硬鏈接到同一個文件,沒有「一個」規範名稱。一種可能性是首先存儲所有文件,然後遞歸遍歷所有文件名。您可以將路徑結構與inode和文件內容分開存儲。

+0

我的回答已經很晚了,但我只想說你解決了我的問題!非常感謝! –