我正在尝试编写一个简单的 shell 程序,但在非内置命令的文件重定向方面遇到了问题。例如 ./a.out < infile > outfile,将使用户编译的程序 a.out 从 infile 获取输入并将其输出输出到 outfile 而不是它通常使用的流。当我遇到一个非内置命令时,我会派生一个新进程并用提供的参数覆盖一个新图像。一般格式为 command arg1 arg2 ... argn < infile > outfile。因此 args(arg1 到 argn)将在新图像中传递,输入和输出将更改为 infile 和 outfile 这是我的 fork 过程的片段。
pid = fork();
if (pid < 0) {
fprintf(stderr, "*** fork error ***\n");
} else if (pid == 0) {
execvp(command, args);
}
waitpid(pid, &status, 0);
是否有允许我执行此操作的 unix 命令?我也在想可能有一种方法可以改变新图像中的标准输入和标准输出?任何链接或信息将不胜感激。
最佳答案
在 Unix 上,您通常需要 dup2
为此。参见 libc docs用于复制文件描述符。
关于c - 用于非内置命令的简单 shell 程序 unix 文件重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4882688/