gpt4 book ai didi

c - 如何以编程方式将 Linux 符号链接(symbolic link)移动到 C 中的不同文件系统(副本)?

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:44 25 4
gpt4 key购买 nike

rename() C 函数不能跨文件系统工作。因此,我可以通过副本移动文件,方法是打开文件、读取文件并将它们写入新副本,然后取消链接。但是我很难让它与符号链接(symbolic link)一起使用。 (想法是移动一个文件夹,里面有一堆其他文件/文件夹/符号链接(symbolic link)等)。基本上在 C 中实现 mv 命令。

open(file, O_RDONLY)
while ((c = read(source_descriptor, buf, SIZE)) > 0){
write(d, buf, c);
}
unlink file;

适用于普通文件(我还有另一个函数可以毫无问题地处理目录)。但是每当它遇到符号链接(symbolic link)时,我都会perror 吐出 No such file or directory

我可以通过 d_type 检测它是否是一个符号链接(symbolic link),但我不确定一旦我有一个符号链接(symbolic link)如何读取/复制它,因为普通文件副本似乎不适用于符号链接(symbolic link),因为 open() 拒绝打开它们。

最佳答案

一旦你确定你正在处理一个符号链接(symbolic link)(这可以通过使用 lstat() 来完成),你可以使用 readlink() 阅读它的内容。并通过调用 symlink() 在目标位置重新创建它.

另见 man 7 symlink .

关于c - 如何以编程方式将 Linux 符号链接(symbolic link)移动到 C 中的不同文件系统(副本)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56037049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com