gpt4 book ai didi

c - shell I/O 重定向

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:57 27 4
gpt4 key购买 nike

您好,我正在尝试用 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 前的状态,因此您需要以某种方式记住该信息。

关于c - shell I/O 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20446365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com