好的,我正在做一个管道来连接我的进程的子进程。 首先,我试图保护我的 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
你们中有人知道为什么会这样吗?
最佳答案
根据您显示的代码,您还没有初始化 fdSG
。这是不正确的,dup2
的参数都需要是有效的文件描述符。
因为你似乎想要复制一个 fd 而不是替换一个现有的你应该使用 dup
作为备份拷贝,它选择一个免费的 fd
并使用它. (或者,您也可以将 fdSG
初始化为有效的 fds)。
来自手册页:
dup()
uses the lowest-numbered unused descriptor for the new descriptor.
关于c++ - 保护输入和输出文件描述符时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20585593/