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

Error safeguarding the input and output file descriptors

本文关键字:出错 描述 文件 输入 输出 保护      更新时间:2023-10-16

好吧,我正在做一个管道来连接我的进程的子进程。首先,我试图保护我的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而不是替换现有的fd,因此应该使用dup作为这些备份副本,它会选择一个空闲的fd并使用它。(或者,您也可以将fdSG初始化为有效的fds)。

来自手册页:

CCD_ 6使用编号最低的未使用描述符作为新描述符。