shino332 a écrit :
Je dois écrire dans un fichier le résultat d'un exec(). Or après l'appel à un exec la fonction est terminé.
|
Pas vraiment, le contexte est détruit. La fonction ne retourne jamais. exec() est un appel système qui remplace l'image d'un executable par un autre. Si tu veux enregistrer le stdout() d'un processus, il faut faire un pipe, fork() puis exec(), ou utiliser des fonctions comme popen() (qui font la même chose, en moins souple).
Citation :
Donc pour pouvoir écrire ailleurs que dans la sortie standard (stdout) il faut la fermer et ouvrir un autre canal.
|
Pas forcément, tu peux obtenir un fds via un open(), et utiliser dup2() pour remplacer le fds stdout par celui-ci. Les cas les plus courants ou on ferme stdout, c'est pour les daemons. dup2() fermera le précédent fds pour toi.
Citation :
Pour cela, j'ai pensé à ouvrir mon fichier avec un fopen("filename","w" ) mais le problème est que fopen est une fonction de haut niveau qui renvoie un FILE* et non pas un file descriptor, donc je ne peux pas faire de dup(fopen("filename","w" )) Ma question est la suivante : Existe-t-il un moyen de récupérer le file descriptor d'un FILE* ?
|
fileno()
Citation :
ou peut-on remplacer stdout par un fopen?
|
Non, pour le controle des I/O, c'est la table des descripteurs de fichier qui prime, vu que c'est elle qui contient les pointeurs vers les ressources (écran, clavier, ligne, socket, whatever).
Message édité par Gf4x3443 le 31-12-2008 à 05:27:25
---------------
Petit guide Kerberos pour l'administrateur pressé