【发布时间】:2013-12-14 16:34:21
【问题描述】:
好的,我正在做一个管道来连接我的进程的子进程。 首先,我试图保护我的 fd,以便以后可以访问它们以获取一些东西,但不知何故,它只是在复制 fd 时卡住了。
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
你们中有人知道为什么会发生这种情况吗?
【问题讨论】:
-
您的代码似乎没问题。我建议做一个 strace。
-
如果实际上没有错误,调用
perror是不正确的。 (你应该检查返回值) -
我打电话给
perror来检查每一行是否有错误,这是一种调试尝试以了解发生了什么。我不会让它这样的。无论如何感谢您的建议。 -
perror不会检查是否有错误,它会告诉您errno是什么。如果您想检查错误,您需要查看dup2和pipe实际返回的内容。 -
errno是perror使用的。函数本身返回一个int,表示您是否需要查看errno/perror
标签: c++ unix pipe file-descriptor