c - 用于非内置命令的简单 shell 程序 unix 文件重定向

标签 c linux shell unix redirect

我正在尝试编写一个简单的 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/

相关文章:

c - 标准输入中的文件结尾

c - C 中的牛顿法

linux -/dev/tcp 在 LINUX 中不存在

Linux rpm 安装但无法删除。为什么?

shell - pgrep 用于与 Ubuntu 中的终端无关的进程

linux - 如何gzip文件并保留原始扩展名?

linux - 等待第二个脚本触发直到第二个脚本的所有后台并行进程完成?

python - Python和C.Bitoperation,.split()函数

c - 是否有推荐的整数类型来存储标准 C 中的函数指针

linux - 如何在没有 X 的 Linux 上安装 Oracle 11g?