Shell I / O重定向

时间:2013-12-07 20:40:22

标签: c linux shell redirect io

您好我正在尝试在c中构建一个shell,而我仍然坚持使用i / o重定向部分。我必须支持多个重定向,例如“333sh:myprog< in_file> out_file”myprog从in_file获取输入,结果将被重定向到out_file,依此类推。你能给我一个起点吗?感谢

2 个答案:

答案 0 :(得分:1)

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

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

如何实际实现重定向非常简单。要启动此流程,我猜你要去fork()然后execvp。要意识到的是,文件描述符是在forc中复制并在execvps中持久化的。

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

答案 1 :(得分:0)

无论你有printf和scanf(或其他使用stdin / stdout的函数),只需用接收文件名参数的函数(fprintf / fscanf)替换它们,并在该文件参数中打开io重定向文件