именованный канал не работает при использовании exec ()

Я пытаюсь отправить некоторые данные из 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. Что бы я ни пытался, я не получаю вывод.

Может кто-нибудь, пожалуйста, укажите мне в правильном направлении?

Спасибо тысячу раз!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]