J’ai un programme écrit en Fortran par quelqu’un d’autre qui lit par conséquent quelques choses à partir de l’entrée standard, puis effectue des calculs et affiche le résultat. Ce que je veux faire est de l’exécuter plusieurs fois avec différentes données d’entrée d’un autre programme, écrit en C par moi. Pour ce faire, j’utilise popen
:
FILE *pipe = popen(".\\program.exe", "wt"); if (!pipe) { exit(1); } fprintf(pipe, "%d\n", thing1); fprintf(pipe, "%d\n", thing2); ... pclose(pipe);
Le problème est que cela ne fonctionne pas de cette façon. Cela fonctionne parfaitement avec “program.exe <input.txt" mais pas de cette façon. Il lit la première chose puis génère cette erreur stupide: "Erreur de fichier système IO-09 – erreur inconnue". Bien sûr, je n'ai aucune idée de ce que cela signifie car je n'ai jamais programmé Fortran.
Qu’est-ce que je fais mal?
MODIFIER:
Malheureusement, je n’ai pas de code source de ce programme
On dirait que ça devrait marcher, on ne sait pas pourquoi ça ne marche pas. Êtes-vous sûr que popen()
est disponible sur votre ordinateur Windows? Je rappelle vaguement qu’il n’est pas disponible sur certains systèmes Windows. Vous pouvez l’essayer avec un simple programme en C et voir si c’est popen()
ou le programme Fortran.
Pour résoudre ce problème, vous pouvez écrire vos données dans un fichier temporaire, puis utiliser le system(".\\program.exe < tempfile")
pour appeler le programme Fortran. Oui, c'est un kludge.
Vous ne dites pas quel compilateur Fortran vous utilisez, mais récemment, un bogue de longue date dans gfortran a été corrigé: la lecture d’un tuyau échouait. Voir
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47694
Donc, si vous utilisez gfortran, vous voudrez peut-être essayer de mettre à jour une version avec le correctif.