Skip to main content
 首页 » 编程设计

c之shell I/O 重定向

2023年11月22日23zlslch

您好,我正在尝试用 c 构建一个 shell,但我被 i/o 重定向部分困住了。我必须支持多重重定向,例如“333sh: myprog < in_file > out_file” myprog 正在从 in_file 获取输入,结果将被重定向到 out_file 等等。你能给我一个起点吗?谢谢

请您参考如下方法:

因此,您正在编写的 shell 负责启动进程 myprog并以某种方式强制它从 in_file 读取输入并将其输出写入 out_file .

您要做的第一件事是解析输入。这意味着在您的程序中以某种方式表示您要启动的进程的名称、要读入的文件名以及要写出的文件名。这样做基本上需要标记字符串 myprog < in_file > out_file然后想出一些表示(如结构)来表示要做什么。

如何真正实现重定向非常简单。要启动这个过程,我猜你会去 fork()然后 execvp .要意识到的是,文件描述符是跨叉复制的,并在 execvps 中持久存在。

所以基本上在 shell 中,您使用 dup(2)调用以将 STDIN_FILENO 替换为 input_file 的文件描述符并将 STDOUT_FILENO 替换为 output_file 的文件描述符.然后fork,然后execvp。 fork 后,在父进程(shell)中,您需要将 STDOUT 和 STDIN 文件描述符恢复为 fork 前的状态,因此您需要以某种方式记住该信息。