使用exec()时,命名管道无法工作

时间:2018-03-21 08:07:14

标签: php c++ linux unix named-pipes

我试图将一些数据从php staight发送到正在运行的cpp脚本中。我试图在"发送"中使用命名管道来做到这一点。应用。让我先分享一些代码。

loop.cpp

main( int argc, char* argv[] ){
    //open pipe
    int action;
    int value;
    char action_result[ BUFSIZ ];
    char value_result[ BUFSIZ ];

    mkfifo( FIFO_ACTION, 0666 );
    mkfifo( FIFO_VALUE, 0666 );

    //loop variables
    bool close_loop = false;
    unsigned int i = 0;

    while( !close_loop ){

        action = open( FIFO_ACTION, O_RDONLY );
        value = open( FIFO_VALUE, O_RDONLY );
        read( action, action_result, BUFSIZ );
        read( value, value_result, BUFSIZ );

        if( strcmp( "", action_result ) != 0 ){
            if( strcmp( "ly", action_result ) == 0 ){

                cout << "Recieved: " << value_result << endl;

            } else if( strcmp( "cl", action_result ) == 0 ){
                break;
            }
        }

        memset( action_result, 0, sizeof(action_result) );
        memset( value_result, 0, sizeof(value_result) );

        close( value );
        close( action );

        usleep( 5000 );
    }

    close( action );
    close( value );

    unlink( FIFO_ACTION );
    unlink( FIFO_VALUE );

    cout << "Closing output" << endl;

    return 0;

}

send.cpp

int main( int argc, char* argv[] ){
    int action;
    int value;

    /* write str to the FIFO */
    action = open( FIFO_ACTION, O_WRONLY );
    value = open( FIFO_VALUE, O_WRONLY );

    write( value, argv[ 1 ], sizeof( argv[ 1 ] ) );
    write( action, "ly", sizeof( "ly" ) );

    cout << "Sended: " << argv[ 1 ] << endl;

    close( value );
    close( action );

    /* remove the FIFO */

    return 0;
}

如果我从终端运行这两个应用程序,一切正常,我得到我的输出。但我必须使用以下代码从php执行send.cpp文件。

exec( "/home/pi/Bureaublad/send $id", $output );
print_r($output);

当我这样做时,我得到了正确的结果&#34; Sended:14&#34;然而,就像在终端中一样,管道似乎不起作用,因为我的loop.cpp中没有任何输出从终端运行。

我个人怀疑有一些unix用户正在进行,但我无法使用谷歌找到任何关于它的信息。无论我尝试什么,我都无法获得输出。

有人可以指出我正确的方向吗?

非常感谢!!

0 个答案:

没有答案