【问题标题】:Piping in exec* POSIX functionsexec* POSIX 函数中的管道
【发布时间】:2018-06-18 11:00:41
【问题描述】:

如何转换:

system("ps -el | grep fork")

execlp 函数的参数?

我试过了:

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

和:

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

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

【问题讨论】:

    标签: c linux pipe exec posix


    【解决方案1】:

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

    为此,您有pipefork 系统调用。

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

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

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

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

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

    【讨论】:

    • 谢谢,我会搜索一下试试看。
    猜你喜欢
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2016-02-26
    • 2011-02-01
    • 2021-03-21
    • 2013-05-06
    • 2012-04-12
    相关资源
    最近更新 更多