微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

unix – 如何捕获execvp的输出

我正在开发一个使用execvp执行程序的程序.它需要捕获子进程的结果并在主进程中解析它们.似乎有一种方法,使用命名管道和重复.我试图找到一个很好的例子,但到目前为止还没有运气.如果有人对此有任何指示,链接和/或建议,我将非常感激.
你不需要命名管道;未命名的管道工作得很好.实际上,通常你可以使用popen而不是自己做管道/ fork / dup / exec. popen的工作原理如下(尽管你的libc实现可能有更多的错误检查):
FILE *popen(const char *command,const char *type) {
    int fds[2];
    const char *argv[4] = {"/bin/sh","-c",command};
    pipe(fds);
    if (fork() == 0) {
        close(fds[0]);
        dup2(type[0] == 'r' ? 0 : 1,fds[1]);
        close(fds[1]);
        execvp(argv[0],argv);
        exit(-1);
    }
    close(fds[1]);
    return fdopen(fds[0],type);
}

这会创建一个未命名的管道和叉子.在孩子中,它将stdout(或stdin)重新连接到管道的一端,然后执行孩子.父母可以简单地从管道的另一端读取(或写入).

原文地址:https://www.jb51.cc/bash/386988.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐