使用dup()创建重复文件描述符和创建硬链接之间的区别?

时间:2012-09-09 06:52:55

标签: c linux hardlink dup

我刚尝试了这个程序,我使用dup来复制打开文件的文件描述符。

我已经对这个文件做了一个硬链接,我打开了同一个文件来读取程序中文件的内容。

我的问题是有什么区别?

我知道dup给了我一个运行时抽象文件,而硬链接更多地指的是filsystem实现,但我不明白需要使用一个而不是另一个。

使用一个优于另一个有什么好处?

如果我们想要引用相同的文件位置而不是创建文件描述符,为什么我们不能明确地引用硬链接,反之亦然?

我正在使用Linux和标准C库。

3 个答案:

答案 0 :(得分:2)

硬链接适用于i-nodesdup适用于已打开的file descriptors。这些是不同的动物。

文件主要是inode,目录条目指向该inode(因此某些文件可以通过硬链接有多个名称,其他文件根本没有名称:临时文件仍然打开但是取消链接有一个i -node由打开的文件描述符引用,但不再有任何名称)。 I节点在文件的持续时间内存在并写入磁盘。

文件描述符仅存在于进程中(仅在内核内存中,而不在磁盘上),因此无法写入磁盘(您只能编写其编号,这通常没有任何意义)。 文件描述符知道(在内核中)其inode,但也知道更多状态,特别是当前偏移量。

您可以在同一个文件上使用两个文件描述符(相同的inode,可能是open - 两个不同的硬链接或符号链接路径)但具有不同的状态(例如,不同的文件位置或偏移量)。

如果使用dup(2)系统调用,则两个文件描述符共享相同的状态(就在dup之后),特别是共享相同的文件偏移或位置。

如果使用link(2)系统调用,则两个目录条目指向同一个inode。它们需要位于同一个文件系统上。

symlink(2)系统调用创建一个新的inode(和一个新文件),它引用符号名称。阅读有关path_resolution(7)symlink(7)的其他手册页。

答案 1 :(得分:0)

硬链接只是一种相同的方式 文件在两个不同的目录中。它可以节省一些磁盘空间。

使用fdup可以让程序中有两个不同的文件描述符指向同一个文件。如果要复制某种包装文件描述符的逻辑对象,这很有用。

答案 2 :(得分:0)

主要区别在于硬链接是持久的,并且重复的文件描述符仅持续与进程一样长。加上已经给出的理由。