dj technics
Gebruiker
- Lid geworden
- 1 sep 2007
- Berichten
- 367
Hi,
Ik zit met een vraagstuk omtrent een app die ik aan het bouwen ben. Eerder werd al gewezen dat de oplossing voor mij vermoedelijk in named pipes zit. Ik heb dit nu geschreven. Hier mijn code.
test.cpp
send.cpp
Dit werkt 100%. Als ik test.cpp run en dan vanuit de terminal "./send 2" uitvoer krijg ik alles zoals verwacht. Het probleem is echter dat ik in real life dit moet triggeren via php. Ik doe dus in php het volgende:
Ik krijg als return "Sended: 14" net zoals ik dit zou uitvoeren vanuit de terminal. Mijn test.cpp geeft echter geen output terwijl dit wel werkt als ik dezelfde command uitvoer vanuit de terminal. Google maakt mij opnieuw niet veel wijzer. Ik vermoed dat dit wordt veroorzaakt doordat php een andere unix user gebruikt maar ik vind, wat ik ook probeer, geen oplossing.
Wie ooh wie kan mij verder op weg zetten?
Alvast 10.000 maal dank!!
Ik zit met een vraagstuk omtrent een app die ik aan het bouwen ben. Eerder werd al gewezen dat de oplossing voor mij vermoedelijk in named pipes zit. Ik heb dit nu geschreven. Hier mijn code.
test.cpp
Code:
main( int argc, char* argv[] ){
//open pipe
int action;
int value;
//int pipe_out;
char action_result[ BUFSIZ ];
char value_result[ BUFSIZ ];
mkfifo( FIFO_ACTION, 0666 );
mkfifo( FIFO_VALUE, 0666 );
//open MYSQL
MYSQL *connect;
connect = mysql_init(NULL);
if(!connect){
cout << "MySQL Initialization failed" << endl;
return 1;
}
connect = mysql_real_connect( connect, "127.0.0.1", "root", "******", "projection", 0, NULL, 0 );
if( !connect ){
cout << "connection failed" << endl;
return 1;
}
MYSQL_RES *res_set;
MYSQL_ROW row;
//loop variables
bool close_loop = false;
unsigned int i = 0;
//char* pcCnvEnd;
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 ){
char statement[512];
snprintf(statement, 512, "SELECT `projection_lyrics_text` FROM `projection_lyrics` WHERE `projection_lyrics_id`=%s", value_result);
mysql_query(connect, statement);
res_set = mysql_store_result( connect );
row = mysql_fetch_row( res_set );
cout << row[0] << "\n" << 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 );
//close( pipe_out );
unlink( FIFO_ACTION );
unlink( FIFO_VALUE );
cout << "Closing output" << endl;
return 0;
}
send.cpp
Code:
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;
}
Dit werkt 100%. Als ik test.cpp run en dan vanuit de terminal "./send 2" uitvoer krijg ik alles zoals verwacht. Het probleem is echter dat ik in real life dit moet triggeren via php. Ik doe dus in php het volgende:
PHP:
exec( "/home/pi/Bureaublad/send $id", $output );
print_r($output);
Ik krijg als return "Sended: 14" net zoals ik dit zou uitvoeren vanuit de terminal. Mijn test.cpp geeft echter geen output terwijl dit wel werkt als ik dezelfde command uitvoer vanuit de terminal. Google maakt mij opnieuw niet veel wijzer. Ik vermoed dat dit wordt veroorzaakt doordat php een andere unix user gebruikt maar ik vind, wat ik ook probeer, geen oplossing.
Wie ooh wie kan mij verder op weg zetten?
Alvast 10.000 maal dank!!
Laatst bewerkt: