我写了自己的shell,但我听不懂逻辑,在这种情况下,在函数execve()
之前,标准的shell用文件描述符做什么?我怎么看,我们打开文件11、22、33,打开或创建文件55、66,然后我们必须创建一些cat < 11 < 22 < 33 > 55 > 66
或类似的东西,并运行3次pipe()
,dup2(fd(11), 0)
,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中。
它是如何工作的?
最佳答案
感谢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)
在此处结束,我们制作ecxecve(".../wc", "wc", env)
,结束fd(66)的重复。
关于c - 当运行“cat <11 <22 <33 <55> 66”的“zsh” shell 时,哪种算法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44367705/