我写了自己的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/

10-14 06:22