作业dup2函数
homework dup2 function
我有一个关于作业的问题,代码如下:
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()
函数的专家,但这是我将如何去做。只要仔细阅读那个网页,这样你就知道这个函数是如何工作的(任何可能通过检查更多的参考资料来验证信息是正确的)。
祝你好运!
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 作业dup2函数