我编写自己的shell,我无法理解逻辑,在这种情况下execve()
,在函数cat < 11 < 22 < 33 > 55 > 66
之前,标准shell对文件描述符做了什么。我怎么看,我们打开文件11,22,33,打开或创建文件55,66,然后我们必须创建一些pipe()
或类似的东西,并运行三次dup2(fd(11), 0)
,{{1 } {},dup2(pip[1], 1)
,每次我们在11,22,33上更改execve()
。之后两次fd()
,dup2(pip[0], 0)
,dup2(fd(55), 1)
和与fd(66)相同?
但是如果execve()
它必须不起作用,它会在55和66中写入三个wc < 11 < 22 < 33 > 55 > 66
命令,但是标准应该将树文件的总和和wc
命令的结果写入文件中55和66。
它是如何工作的?
答案 0 :(得分:0)
感谢Wumpus Q. Wumbley,我了解zsh在运行此命令wc < 11 < 22 < 33 > 55 > 66
时会发生什么。
也许有人想知道它,我写下我理解的东西。
打开文件的所有文件描述符(11,22,33,55,66)后,我们创建一个pipe(pip[])
。然后,我们逐个运行每个子流程dup2(fd(11), 0)
和dup2(pip[1], 1)
,结束execve("/bin/cat", "cat", env)
,然后使用fd(22)
和fd(33)
重复此流程。
然后,我们将运行下一个子流程dup2(pip[0], 0)
,dup2(fd(55), 1)
在此处结束{}},结束重复fd(66)。