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

时间:2018-10-03 02:28:54

标签: c++ io-redirection execvp dup2

因此,我尝试使用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索引始终是stdin,这是从中读取输入的地方。然后执行后,将其替换为原来的标准。所以我对自己做错了感到困惑。

1 个答案:

答案 0 :(得分:0)

file_desc仅用于写入(O_WRONLY)-尝试将其打开以进行读取(O_RDONLY)。

您可能还想:

  • 在fork()和exec()之间的dup2()而不是保存和还原stdin-减少了系统调用,并节省了多线程应用程序中的竞争。

  • 在父进程中关闭file_desc

  • 在dup2之后(和exec之前)在子进程中关闭file_desc