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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (71)

我知道dup,dup2,dup3“ 创建文件描述符oldfd的副本 ”(来自手册页)。但是我无法理解它。

据我所知文件描述符只是数字来跟踪文件的位置和它们的方向(输入/输出)。难道不容易吗?

fd=fd2;

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

dup()为新描述符使用编号最小的未使用描述符。

这是否意味着如果假设我们已经接近其中一个,它也可以将stdinstdoutstderr作为值?

提问于
用户回答回答于

答案是肯定的。如果标准输入,标准输出或标准错误都关闭,则制作的文件描述符可以取值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
用户回答回答于

文件描述符比数字多一点。它也带有各种半隐藏状态(无论是否打开,它引用哪个文件描述,还有一些标志)。dup重复此信息,因此可以例如独立关闭两个描述符,不是fd=fd2

所属标签

可能回答问题的人

  • 应用案例分享

    1 粉丝490 提问5 回答
  • 找虫虫

    5 粉丝0 提问4 回答
  • uncle_light

    5 粉丝518 提问3 回答
  • 学生

    8 粉丝476 提问3 回答

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动