如何将子进程的stdout重定向到父进程

时间:2013-03-06 16:51:24

标签: c++ process parent-child stdout

我试图从用C ++编写的服务器应用程序中的线程调用子进程。

它首先看起来不错,但现在我遇到了计时问题,因为子进程的输出变大了。

这就是我现在正在做的事情:

int readlinesFromCommandStdout( char * const *argv, int maxLines, int timeout, std::list<std::string> &destination )
{
    int count = 0;

    int filedes[2];
    pipe( filedes );
    dup2( filedes[0], 0 );
    dup2( filedes[1], 1 );

    int flags = fcntl( filedes[0], F_GETFL, 0 );
    flags |= O_NONBLOCK;
    fcntl( filedes[0], F_SETFL, flags );

    spawnv( P_NOWAITO, argv[0], (char * const *) argv );

    char *buffer = (char*) malloc(MAX_BUFFER);
    struct pollfd fds;
    fds.fd = filedes[0];
    fds.events = POLLRDNORM;
    int polling;

    if(!buffer)
        return -1;

    do {

        polling = poll( &fds, 1, timeout <= 0 ? 1000 : timeout );
        if ( gets( buffer ) == NULL ) {
            break;
        }
        destination.push_back( buffer );
        count++;

        if(count >= maxLines) {
            break;
        }
    } while ( polling > 0 );

    close( filedes[0] );
    close( filedes[1] );

    free(buffer);

    return count;
}

有时候,两个独立孩子的输出会混淆不清。我很确定错误在于dup2()次来电。所有孩子的stdout描述符是否都重定向到正确的父线程?

我错过了什么吗?

0 个答案:

没有答案