首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作业dup2函数

作业dup2函数
EN

Stack Overflow用户
提问于 2011-11-29 06:14:04
回答 2查看 1.1K关注 0票数 1

我有一个关于作业作业的问题,有以下代码:

代码语言:javascript
复制
dup2(fd,0);
dup2(fd,1);
dup2(fd,2);
if(fd>2)
    close(fd);

上面写着,

“为了了解为什么需要进行if测试,假设fd为1,并在每次调用dup2时绘制三个描述符条目和相应的文件表条目发生了什么,然后假设fd为3并绘制相同的图。

我想知道我能否在这件事上得到一些帮助,因为我很迷茫。

谁能给我一个关于这个材料的快速教程,因为我很难在我的书和网上找到它。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-11-29 06:28:19

如果fd为3时,它将关闭最初分别指向stdin、stdout、stderr的fds 0、1、2,并创建fd: 0、1、2的3个副本,它们都指向与fd 3相同的目的地。现在不需要3,所以关闭它,因为已经有0、1、2指向3所指向的位置,并且不再计划使用3。

如果fd为1时,它将关闭最初分别指向stdin、stderr的fds 0和2,并创建fd: 0、2的两个副本,所有这些副本都指向与fd 1 (stdout)相同的目的地。现在您确实需要1指向stdout,因为您的程序的其余部分计划使用1作为stdout,因此在这种情况下不关闭fd。

因此,您需要if语句,因为在一种情况下,您需要关闭不打算使用的fd,而在另一种情况下,您不需要关闭计划使用的fd。

手册页:http://linux.die.net/man/2/dup2

票数 3
EN

Stack Overflow用户

发布于 2011-11-29 06:27:38

首先,循环dup2()函数所做的事情,例如http://www.mkssoftware.com/docs/man3/dup2.3.asp。该链接告诉您,dup2()“将打开的文件描述符复制到另一个文件描述符”,并且“如果成功,dup2()将返回一个非负整数;即复制的文件描述符,它是可用的最低描述符。”

然后,您需要在一张纸上绘制文件描述符(只需在一张纸上画fd012 )。这将是您在第一个dup2()调用之前拥有的文件描述符的初始状态。也就是说,您有三个文件描述符。

然后在每次调用dup2()之后重新绘制文件描述符。最后,如果是fd > 2,则关闭其中一个文件描述符。

我不是dup2()函数的专家,但我会这样做。只要仔细阅读该网页,就可以知道该函数是如何工作的(任何可能通过检出几个参考资料来验证信息是否正确)。

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8306668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档