Я пытаюсь отправить некоторые данные из 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;
}
Если я запускаю оба приложения из терминала, все работает нормально, и я получаю вывод. Но я должен использовать следующий код для запуска файла send.cpp из php.
exec( "/home/pi/Bureaublad/send $id", $output );
print_r($output);
Когда я делаю это, я получаю правильный результат «Отправлено: 14», как в терминале, однако, каналы, кажется, не работают, так как у меня нет вывода в моем loop.cpp, запущенном из терминала.
Лично я подозреваю, что происходит какая-то пользовательская работа с Unix, но я ничего не могу найти с помощью Google. Что бы я ни пытался, я не получаю вывод.
Может кто-нибудь, пожалуйста, укажите мне в правильном направлении?
Спасибо тысячу раз!
Задача ещё не решена.
Других решений пока нет …