嗨,
我正在编写一个minishell来了解Bash是如何工作的,我希望它能像管道一样使用
例如ls | sort
(使用>
,<
,>>
,&
的所有命令都可以正常工作)
这是结构:
main() {
display loop {
-> function that use strtok to split command line and store commands
-> fork
parent process : make a wait()
child process has the execution loop with execv.
}
我有一些问题需要了解如何实现管道。
我创建类似fd[2]
的内容来使用管道:fd[0]
来阅读,fd[1]
来写。
我知道我在父进程中使用pipe()
函数。当我fork()
时,子进程继承fd[2]
。
在我的minishell中,只有子进程可以执行命令。
我有点困惑,因为我不知道是否必须使用fork()
两次?以及谁(父或子)执行命令,我想只保留一个执行循环(就像我之前解释的那样)。你认为使用读写是个好主意吗?
ls | sort
:必须在管道中写入输出ls
,然后进程必须读取管道,这将成为sort
命令的输入,我是对的吗?
谢谢: - )
编辑:我只使用一个执行官,我不知道是否可能?