复制网络上的符号链接

时间:2011-02-05 15:26:34

标签: c unix networking copy symlink

我正在编写源代码控制应用程序。现在我想使用BSD套接字通过网络将文件从一台机器复制到另一台机器。我也想要不遵循符号链接,而是将链接本身复制到另一台机器上。我是一个坚持这个问题的小人物。

我想到的一个选项是使用readlink()命令,将数据发送到机器的另一端并将接收的内容写入文件。我甚至不知道这是否会起作用,因为我不知道不同的操作系统(在我的情况下是Ubuntu和Mac OS X)在符号链接中具有相同的文件结构。我甚至不知道将这些收到的内容写入文件会自动使其成为符号链接。老实说,我几乎不怀疑。也许带有open()标志的O_SYMLINK命令可以创建一个符号链接并写入它?

我想到的另一个选择是让其他机器知道我们正在处理链接并使用symlink()在该机器上建立该链接,但这里有两个问题。首先,如何获得符号链接指向文件系统的绝对文件名。第二个问题是我不知道用不存在的文件调用symlink()是否有效?

如果有人能解释一下,我会很感激, ief2

2 个答案:

答案 0 :(得分:1)

为什么不做以下事情:     tar cvfp - 。 | ssh user @ remote“cd targetdir; tar xfp - ” ?

答案 1 :(得分:1)

您应该在源系统上使用readlink,并在目标系统上使用符号链接。符号链接实际上没有“符号链接中的文件结构”;符号链接只包含文件路径(绝对路径或相对路径)。

你应该按原样复制符号链接,即。不要尝试将其调整到目标系统。在目标文件不存在的情况下使用符号链接是完全正常的(它们被称为“破坏的符号链接”)。用户必须设置有意义的链接(可能是绝对的,但通常是相对的);如果他们不这样做,事情就会以可预测的方式失败。