我试图将一些数据从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用户正在进行,但我无法使用谷歌找到任何关于它的信息。无论我尝试什么,我都无法获得输出。
有人可以指出我正确的方向吗?
非常感谢!!