有人可以解释C中的dup()吗?

我知道dup,dup2,dup3“创建一个文件描述符oldfd的副本”(从手册页)。但是我不能消化它。

因为我知道文件描述符只是跟踪文件位置和方向(输入/输出)的数字。不会更容易

fd=fd2;

每当我们想复制一个文件描述符?

还有别的东西..

dup() uses the lowest-numbered unused descriptor for the new descriptor.

这是否意味着如果我们假设我们有close() – 其中之一,它也可以作为值stdin,stdout或stderr。

只是想在第二个问题上回答自己,然后尝试了一下。

答案是YES。如果stdin,stdout或stderr关闭,则您所做的文件描述符可以取值为0,1,2。

例:

close(1);     //closing stdout
newfd=dup(1); //newfd takes value of least available fd number

文件描述符发生在哪里:

0 stdin     .--------------.     0 stdin     .--------------.     0 stdin
1 stdout   =|   close(1)   :=>   2 stderr   =| newfd=dup(1) :=>   1 newfd
2 stderr    '--------------'                 '--------------'     2 stderr
翻译自:https://stackoverflow.com/questions/7861611/can-someone-explain-what-dup-in-c-does

转载注明原文:有人可以解释C中的dup()吗?