“zsh”shell中运行“cat< 11<<< 11<<>>>

时间:2017-06-05 11:15:19

标签: c unix zsh

我编写自己的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。 它是如何工作的?

1 个答案:

答案 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)。