Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用dup()创建重复文件描述符和创建硬链接之间的区别?_C_Linux_Hardlink_Dup - Fatal编程技术网

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

C 使用dup()创建重复文件描述符和创建硬链接之间的区别?,c,linux,hardlink,dup,C,Linux,Hardlink,Dup,我刚刚试过这个程序,我用dup复制一个打开文件的文件描述 我做了一个硬链接到同一个文件,我打开了同一个文件来读取程序中文件的内容 我的问题是有什么区别 我知道dup给了我一个文件的运行时抽象,硬链接更多的是指filsystem实现,但我不理解使用其中一个的必要性 使用其中一个的优点是什么 如果我们想引用相同的文件位置,而不是创建文件描述符,那么为什么不能显式引用硬链接呢 我正在使用Linux和标准C库。硬链接在上工作,dup在Open上工作。这些是不同的动物 文件主要是一个inode,目录条目指

我刚刚试过这个程序,我用dup复制一个打开文件的文件描述

我做了一个硬链接到同一个文件,我打开了同一个文件来读取程序中文件的内容

我的问题是有什么区别

我知道dup给了我一个文件的运行时抽象,硬链接更多的是指filsystem实现,但我不理解使用其中一个的必要性

使用其中一个的优点是什么

如果我们想引用相同的文件位置,而不是创建文件描述符,那么为什么不能显式引用硬链接呢

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

硬链接在上工作,
dup
在Open上工作。这些是不同的动物

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

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

您可以让两个文件描述符在同一个文件上工作(同一个inode,可能通过
open
-ing指向它的两个不同硬链接或符号链接路径),但具有不同的状态(例如,不同的文件位置或偏移量)

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

如果使用syscall,则两个目录项指向相同的inode。它们需要在同一个文件系统上


系统调用将创建一个新的inode(和一个新文件),该inode引用符号名。阅读关于和的其他手册页。

硬链接只是一种实现相同功能的方法 文件位于两个不同的目录中。它有助于节省一些磁盘空间


使用
fdup
可以让程序中有两个指向同一文件的不同文件描述符。如果您想要复制某种封装文件描述符的逻辑对象,那么它非常有用。

主要区别在于硬链接是持久的,复制的文件描述符只在进程中持续一段时间。加上已经给出的原因。

这对节省磁盘空间有什么帮助?它们指向同一个inode。大小信息在元数据中,而不是硬链接中。这是对具有两个相同文件的优化。还要注意,文件描述符具有附加状态。如果打开一个文件,读取一个字节,然后复制描述符,则在下次读取时,这两个描述符都将返回该文件的第二个字节。这意味着,在删除指向该文件的所有链接后,仍可以访问由某个进程打开且未链接的文件。是的,临时文件就是这样完成的。但您只能通过以前打开的文件描述符访问该文件。只有当最后一个打开文件的进程终止时,才会删除磁盘上的文件。使用dup访问同一文件的内容比在程序中打开同一文件的硬链接有什么好处?这两个都是系统调用。好的,我想我现在明白了。为什么dup比打开同一个文件两次更受欢迎?内核显然将分配两个不同的文件描述符,它们将指向同一个文件。在使用dup时,open not是否存在延迟或延迟问题?我不明白您为什么需要硬链接。硬链接用于解决文件系统命名空间中的共享问题。我不认为那是你想要的。