重定向I/O,在C中实现shell

Hou*_*lik 3 c unix io shell

我正在实现一个shell,在我的shell中我必须能够处理'>'''''''''''.我得到了大部分工作,但是当用户想要在命令行中输入类似于:

SHELL$ sort < input > output
Run Code Online (Sandbox Code Playgroud)

我没有得到确切的结果.我得到的是排序将输出发送到STDOUT,然后从STDIN排序读取并将输出发送到"输出"

我知道我必须使用排序重定向排序

dup2(fd, STDIN_FILENO)
Run Code Online (Sandbox Code Playgroud)

fd是输入文件的文件描述符.

好奇的部分是如何重定向排序的输出,而不是将输出发送到STDOUT,发送到我们'>'指向,在我的例子中是输出

所以命令sort读取输入:"sort <input",这个:"> output"最终会将sort的输出发送到"output".

提前致谢!

Jea*_*nès 9

in = open("input",O_RDONLY);
dup2(in,STDIN_FILENO);
close(in);
out = open("output",O_WRONLY|O_CREAT,0666); // Should also be symbolic values for access rights
dup2(out,STDOUT_FILENO);
close(out);
execlp("sort","sort",NULL);
Run Code Online (Sandbox Code Playgroud)