J'ai une application java ici qui démarre une application C++ via l'API java.lang.Process et essaie ensuite d'envoyer des commandes via le tuyau de stdin:Problème de communication entre Java et C++ application sur stdin
process.getOutputStream().write("foo\n"); process.getOutputStream().flush();
Côté C++, une boucle vérifie l'entrée dans stdin et s'il y en a une , elle la lit. Malheureusement, la vérification retourne toujours 0, donc il n'essaie jamais de lire. Si je retire le chèque, il commencera soudainement à voir les commandes et à les traiter. C'est sur Linux.
Le code des applications C++ pour vérifier et lire stdin est ceci:
fd_set fds; FD_ZERO (&fds); FD_SET (0, &fds); struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 0; if(select (1, &fds, 0, 0, &tv) > 0) { char buf[16384]; buf[16383] = '\0'; if (fgets (buf, sizeof (buf) - 1, stdin) == 0) return; }
Comme je l'ai dit, en supprimant la clause if fait fonctionner, mais bien sûr thats pas si agréable que la boucle autour d'elle fait aussi d'autres choses. Quelqu'un a une idée de ce que je fais mal ici?
Mise à jour: En attendant, j'ai pu reproduire le problème avec deux exemples d'applications très petites. Le problème semble être lié au framework Qt ici, dès que je crée l'instance QCoreApplication nécessaire pour le framework alors select() pour stdin ne semble plus fonctionner.
devrait utiliser ' fgets (BUF, sizeof (BUF), stdin) '' non sizeof (BUF) - 1' – user102008