在exec * POSIX函数中管道

时间:2018-06-18 11:00:42

标签: c linux pipe exec posix

如何转换:

system("ps -el | grep fork")

execlp函数的参数?

我试过了:

execlp("ps", "ps", "-el", "|", "grep", "fork", (char*)0)

execlp("ps", "ps", "-el", "grep", "fork1", (char*)0)

但两个都不起作用。是否可行?

1 个答案:

答案 0 :(得分:3)

管道不是POSIX系统的自动功能,您必须自己实现它。

为此,您可以进行pipefork系统调用。

pipe函数创建一对文件描述符,一个用于写入,另一个用于读取。 fork函数“分叉”了一个新进程。

诀窍是使用pipe函数创建管道,并创建子进程。然后,父进程可以使用管道的写文件描述符映射到进程的标准输出(通常使用dup2函数完成)。然后父进程exec管道的第一个(左侧)命令。

子进程获取管道的读取描述符,并将其映射到标准输入,以及管道的另一个(右侧)的类似exec命令。

这将导致第一个命令到标准输出的所有输出都通过管道输出到第二个命令的标准输入。

互联网上有许多关于如何实际操作的教程和示例。