我正在使用以下代码部分为我的自定义 C++ shell 执行输入重定向。虽然与此类似的输出重定向运行良好,但输入重定向的子进程保持打开状态并且不会返回,就像它一直在等待新输入一样。在读取输入后“询问”或“强制”这样的子进程立即返回的最佳方法是什么?
输入重定向代码
int in_file = open(in, O_CREAT | O_RDONLY , S_IREAD | S_IWRITE);
pid_t pid = fork();
if (!pid) {
dup2(in_file, STDIN_FILENO);
if (execvp(argv[0], argv) < 0) {
cerr << "*** ERROR: exec failed: "<< argv[0] << endl;
exit(EXIT_FAILURE);
}
}
close(in_file);
输出重定向代码
out_file = open(out, O_CREAT | O_WRONLY | O_TRUNC, S_IRWXU);
pid_t pid = fork();
if (!pid) {
dup2(out_file, STDOUT_FILENO);
if (execvp(argv[0], argv) < 0) {
cerr << "*** ERROR: exec failed: "<< argv[0] << endl;
exit(EXIT_FAILURE);
}
}
close(out_file);
我使用以下命令进行测试:
ps aux > out.txt
grep root < out.txt
第一个命令在成功写入 out.txt 后返回到 shell。第二个命令从 out.txt 成功读取,但不返回或停止。