好吧,我正在做一个管道来连接我的过程中的孩子。 首先,我试图保护我的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
你们有没有任何线索为何会发生这种情况?
答案 0 :(得分:1)
根据您展示的代码,您尚未实现fdSG
。这不正确,dup2
的参数都需要是有效的文件描述符。
由于您似乎想要复制fd而不是替换现有的fd,因此您应该使用dup
代替这些备份副本,它会选择一个免费fd
并使用它。 (或者你也可以将fdSG
初始化为有效的fds。)
从联系手册:
dup()
使用编号最小的未使用描述符作为新描述符。