Si vous utilisez fopen, répondez par fclose, il est peu probable que vos close(f) soient valides. Un stream et un descripteur de fichier sont deux choses différentes.
Puisque vous allouez dynamiquement le buffer, faites le uniquement dans le processus père. Sinon, le processus fils va hériter d'une copie.
De même pour les bashargs, dans le fils.
Pour moi, vous lancez toujours un bash ... qui lance un autre bash (vérifiez avec ps).
Sortez du while tout ce qui ne doit être fait qu'une fois (le timeout).
Pas besoin du else, soit execve remplace complètement le processus, soit il échoue:
[^] # Re: Impossible
Posté par David Marec . En réponse au message Communication entre processus avec pipe() et dup2().. Évalué à 4.
C'est étudié pour ;)
Plusieurs remarques,
Si vous utilisez
fopen, répondez parfclose, il est peu probable que vosclose(f)soient valides. Un stream et un descripteur de fichier sont deux choses différentes.Puisque vous allouez dynamiquement le buffer, faites le uniquement dans le processus père. Sinon, le processus fils va hériter d'une copie.
De même pour les bashargs, dans le fils.
Pour moi, vous lancez toujours un bash ... qui lance un autre bash (vérifiez avec ps).
Sortez du
whiletout ce qui ne doit être fait qu'une fois (le timeout).Pas besoin du else, soit
execveremplace complètement le processus, soit il échoue:si vous voulez voir quelque chose dans votre fichier,
faites des fflush.
Maintenant que vous avez tout écrit à la main, vous pouvez lire le manuel de forkpty
voire les sources.
et utiliser un poll ou un epoll.
C'est con tous ces #define _XOPEN_SOURCE et autres, hein.
Pour éviter ce bordel, passez sous FreeBSD.