Tu peux aussi utiliser le résultat d'une commande, comme en shell, avec les symboles « ` » ou « $(…) », et encadrer ces symboles avec des guillemets « " » pour être sûr que le résultat sera considéré comme une chaîne unique. Du coup, tu peux mettre ta chaîne dans un fichier et l'insérer en argument pendant une session gdb avec :
(gdb) r programme "$(cat fichier.txt)"
Seulement, passer des arguments kilométriques de cette manière à un programme, c'est particulièrement sale ! Il est même probable que les arguments eux-mêmes ne soient pas conçus pour admettre des chaînes aussi longues.
Si ce que tu passes en argument, ce sont justement les données à traiter, alors la manière normale de procéder est de passer par l'entrée standard. Ça se gère comme un fichier, tu reçois le signal EOF lorsque la fin des données est atteinte, et tu n'as pas besoin de t'occuper de l'ouverture et de la re-fermeture. Ça permet également à l'utilisateur de piper ta commande avec une autre ou de passer directement le fichier en question à l'entrée standard avec « < ».
J'ai essayé les tuyaux, ça ne fonctionne pas (BROKEN PIPE).
A priori, tu n'as pas besoin d'ouvrir explicitement un tube pour ce faire. Si tu as obtenu ce message en exploitant l'entrée standard, c'est probablement parce qu'il a été émis par l'autre programme qui, lui, s'est retrouvé confronté à un tube vide quand il cherchait à ÉCRIRE dedans. Fort probablement parce que ton programme s'est terminé avant d'avoir lu tout ce qu'il y avait à lire.
Partager