使用 dup2() 进行输入重定向

Input redirection using dup2()

本文关键字:输入 重定向 dup2 使用      更新时间:2023-10-16

所以我正在尝试使用 dup2(( 和 execvp(( 在 c++ 中实现以下命令行语句:wc < inputFile.txt然后返回我的命令行。所以基本上我正在分叉一个进程并在子进程中执行该命令。 但是我的代码出现以下错误:wc: stdin: read: Bad file descriptor

这是我的代码:

int file_desc = open(fileName.c_str(), O_WRONLY | O_APPEND); 
int stdin = dup(0);
dup2(file_desc,0); 
execvp (args2[0], args2); // now execute
dup2(stdin, 0);

所以我的思考过程是我需要将标准(又名文件描述符表的索引 0(重定向到文件的文件描述符,因为 at index 始终是 stdin,这就是读取输入的地方。然后在我执行后,我用原始标准替换它。所以我对自己做错了什么感到困惑。

file_desc只打开用于写入 (O_WRONLY( - 尝试打开它进行阅读 (O_RDONLY(。

您可能还需要:

  • fork(( 和 exec(( 之间的 dup2(( 而不是保存和恢复 stdin - 更少的系统调用并在多线程应用程序中保存比赛。

  • 关闭父流程中的file_desc

  • 在 dup2 之后(以及 exec 之前(关闭子进程中的file_desc