我试图理解,对于上面的命令,当与shell本身相关联的进程被echo的替换时,shell如何安排输出重定向?非常感谢任何帮助。
此致 Rupam
答案 0 :(得分:0)
外部命令的输出重定向是通过操作文件描述符来实现的,文件描述符通常涉及dup2
,这是一个将文件描述符分配给现有打开文件的系统调用。在这种情况下,指示执行echo
的进程的标准输出指向目标输出文件。
shell完全等同于以下步骤:
fork()
创建当前流程的副本;后续步骤发生在子进程中。 (当使用exec
调用命令时,将省略此步骤,如您的示例所示。)test
进行编写并记住文件描述符dup2(fd, 1)
execlp
或类似内容,以执行echo
echo
命令只是写入标准输出,文件描述符编号为1的花哨名称。如果最终写入TTY,文件或其他程序,它并不在意。上述步骤确保文件描述符1确实指向打开的文件test
。