作业dup2函数

homework dup2 function

本文关键字:函数 dup2 作业      更新时间:2023-10-16

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

dup2(fd,0);
dup2(fd,1);
dup2(fd,2);
if(fd>2)
    close(fd);

,

"要了解为什么需要if测试,假设fd为1并画一幅图这三个描述符项和对应的每次调用dup2时的文件表项。然后假设fd为3并绘制同样的图片。"

我想知道我是否可以得到一些帮助,因为我很迷路。

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

如果fd是3,它将关闭FDS 0、1、2,它们原本分别指向stdin、stdout、stderr,并创建fd: 0、1、2的3个副本,它们都指向与fd3相同的目标。现在你不需要3了,所以你关闭了它,因为你已经有0 1 2指向3的位置了,你不打算再使用3了。

如果fd是1,它将关闭FDS 0, 2,它们原本分别指向stdin和stderr,并创建两个fd: 0, 2的副本,它们都指向与FDS 1 (stdout)相同的目标。现在您确实需要1指向标准输出,因为您的程序的其余部分计划使用1作为标准输出,因此在这种情况下您不会关闭fd。

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

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

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

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

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

我不是dup2()函数的专家,但这是我将如何去做。只要仔细阅读那个网页,这样你就知道这个函数是如何工作的(任何可能通过检查更多的参考资料来验证信息是正确的)。

祝你好运!