通过网络复制符号链接

问题描述:

我正在编写源代码管理应用程序。现在我想使用BSD套接字通过网络将文件从一台机器复制到另一台机器上。我也不想遵循符号链接,而是将链接本身复制到另一台机器上。我被这个问题困住了。通过网络复制符号链接

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

我想过的另一个选择是让另一台机器知道我们正在处理一个链接并在该机器上创建该链接,但在这里我有两个问题。首先,我如何获得文件系统上符号链接指向的绝对文件名。而第二个问题是,我不知道如果调用symlink()与一个不存在的文件将工作?

我会很感激,如果有人可以解释这一点, ief2

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

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

为什么不这样做: 焦油cvfp - 。 | ssh user @ remote“cd targetdir; tar xfp - ” ?

+0

因为我想知道事情是如何工作的 – v1Axvw 2011-02-05 15:36:02