使用scandir()时打开每个文件但不链接到其他目录

时间:2012-05-21 22:09:05

标签: c loops copy scandir

我想使用POSIX scandir()以递归方式将一个目录复制到另一个目录(如cp -R)。

问题在于,当我复制像/ sys / bus /这样包含更高级别链接的目录时(例如:foo / foo1 / foo2 / foo / foo1 / foo2 / foo / ...),系统进入循环状态并永久复制“中间”目录...

如何检查我用dirent打开的文件是否是链接?

1 个答案:

答案 0 :(得分:1)

看看这个:How to check whether two file names point to the same physical file

您需要存储已访问过的inode列表,以确保不会出现任何重复项。如果您有两个指向同一文件的硬链接,则没有“一个”规范名称。一种可能性是首先存储所有文件,然后递归所有文件名。您可以将路径结构与inode和文件内容分开存储。