如何重定向 fork() 创建的子进程的 IO 并使用 exec() 函数?
Posted
技术标签:
【中文标题】如何重定向 fork() 创建的子进程的 IO 并使用 exec() 函数?【英文标题】:How to redirect the IO of child process created by fork() and uses exec() function? 【发布时间】:2012-11-03 06:19:17 【问题描述】:我正在用 C 语言编写一个 Shell。用户应该能够执行各种命令并使用管道(|)将一个命令的输入重定向到另一个命令。主 shell 进程是父进程,并为每个命令派生新进程,在子进程中,该命令由 exec*() 函数调用。
但我不知道如何将一个子进程的标准输入/输出重定向到另一个子进程。
【问题讨论】:
【参考方案1】:也许这对你有帮助....
int f=open(somefile, O_WRONLY | O_CREAT, S_IRWXU);
dup2(f,1); //redirecting output to file
//execute your first command here using fork
close(f);
int f=open(somefile, O_RDONLY | O_CREAT, S_IRWXU);
dup2(f,0); //this will give the ouput of the first command to stdout
//i.e. the input is present for second one
//execute your second command here
close(f);
【讨论】:
在第二次调用 dup2 时,在评论中,我猜它是标准输入而不是标准输出。 有没有比文件更好的方法?我可以使用管道或任何其他 IPC 机制吗?最后,如何将该文件描述符“1”设置回标准输出? 是的,它应该是标准输入。如果您希望将第二个进程的输出打印在标准输出上,则不需要这样做以上是关于如何重定向 fork() 创建的子进程的 IO 并使用 exec() 函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在最后一个子 fork() 下打印带有名称和 pid 的子进程