保护输入和输出文件描述符时出错

时间:2013-12-14 16:34:21

标签: c++ unix pipe file-descriptor

好吧,我正在做一个管道来连接我的过程中的孩子。 首先,我试图保护我的fds所以我可以稍后访问它们的某些东西,但不知何故它只是在复制fds时卡住了。

int pipeFd [2];
int pid;
pipe (pipeFd);

//Safeguard of the Original FDs
int fdSG [2];
perror ("fdsg create");
dup2 (1, fdSG [1]);
perror ("dup2 sfg1");
dup2 (0, fdSG [0]);
perror ("dup2 sfg2");
dup2 (pipeFd [1], 1);

程序卡在此处显示的最后一条指令中。

终端输出如下:

fdsg create: Success
dup2 sfg1: Bad file descriptor
dup2 sfg2: Bad file descriptor
dup2: Bad file descriptor

你们有没有任何线索为何会发生这种情况?

1 个答案:

答案 0 :(得分:1)

根据您展示的代码,您尚未实现fdSG。这不正确,dup2的参数都需要是有效的文件描述符。

由于您似乎想要复制fd而不是替换现有的fd,因此您应该使用dup代替这些备份副本,它会选择一个免费fd并使用它。 (或者你也可以将fdSG初始化为有效的fds。)

从联系手册:

  

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