因此,我尝试使用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,这是从中读取输入的地方。然后执行后,将其替换为原来的标准。所以我对自己做错了感到困惑。
答案 0 :(得分:0)
file_desc仅用于写入(O_WRONLY)-尝试将其打开以进行读取(O_RDONLY)。
您可能还想:
在fork()和exec()之间的dup2()而不是保存和还原stdin-减少了系统调用,并节省了多线程应用程序中的竞争。
在父进程中关闭file_desc