我刚尝试了这个程序,我使用dup来复制打开文件的文件描述符。
我已经对这个文件做了一个硬链接,我打开了同一个文件来读取程序中文件的内容。
我的问题是有什么区别?
我知道dup给了我一个运行时抽象文件,而硬链接更多地指的是filsystem实现,但我不明白需要使用一个而不是另一个。
使用一个优于另一个有什么好处?
如果我们想要引用相同的文件位置而不是创建文件描述符,为什么我们不能明确地引用硬链接,反之亦然?
我正在使用Linux和标准C库。
答案 0 :(得分:2)
硬链接适用于i-nodes,dup
适用于已打开的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)
主要区别在于硬链接是持久的,并且重复的文件描述符仅持续与进程一样长。加上已经给出的理由。