Exécuter la ligne de commande et retourner la sortie de la commande

Actuellement, j’utilise les appels en ligne de commande shell de mon programme fortran en utilisant une routine insortingnsèque SYSTEM non standard (similaire à Fortran 2008 EXECUTE_COMMAND_LINE insortingnsèque):

CALL SYSTEM(commandStr) 

où commandStr est une chaîne de caractères contenant la commande shell que je veux exécuter. Pour le moment, je ne suis pas au courant d’un moyen direct de retourner la sortie de commandStr, mais seulement son statut de retour. Donc, ce que je fais maintenant, c’est écrire une sortie dans un fichier, puis lire le fichier depuis le programme Fortran. Exemple:

 CALL SYSTEM('sed ''s/,//g'' myFile > dummyFile') 

si je veux supprimer les virgules de myFile. J’utilise ensuite OPEN et READ pour obtenir le contenu de dummyFile.

Cela fonctionne très bien, mais je m’inquiète de l’écriture / lecture de fichiers à partir du disque, surtout si je le faisais dans une longue boucle, et si la sortie commandStr était grande. Existe-t-il un moyen de redirect la sortie CommandStr vers un tampon de mémoire (pas un disque dur) auquel je pourrais accéder directement depuis mon programme Fortran (peut-être via un numéro UNIT spécifique)?

S’il s’agit d’un environnement POSIX, la fonction de bibliothèque popen() peut également être disponible.

 iunit = popen ('sed ''s/,//g'' myFile', 'r') 

Regardez la documentation de votre environnement Fortran car je ne suis pas sûr de la sémantique de la connexion des E / S à Fortran. Si c’est comme la bibliothèque d’exécution C, la connexion de fichier a également besoin d’une fonction spéciale pour la fermer, pclose() .