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

标签 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

你们中有人知道为什么会这样吗?

最佳答案

根据您显示的代码,您还没有初始化 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/

相关文章:

c# - Visual Studio 2005 中的自动更新版本号 (C++/C#)

c - 子进程如何杀死其他子进程然后终止?

c++ - 从构造函数中将 "this"传递给函数?

linux - 如果 `so`代表共享对象,那么 `a`代表什么?

c - 为什么在我的主函数的任何部分运行之前我会遇到段错误(核心转储)

php - laravel 路由在 linux 中不工作,但在 unix 中工作

bash - 在管道命令中从文件内容切换到 STDIN? (Linux shell )

c - 如何通过管道在外部程序中使用 STDIN 数据

c++ - 是否可以抛出 C++ 标准库中定义的异常?

c++ - 在 QT : 中返回对话框时遇到错误