2009-03-16 3 views
7

J'ai créé un tube et j'ai utilisé dup2() pour remplacer les flux 1 & 2 (stdout & stderr) dans ces tubes.Comment utiliser fprintf et écrire sur un tube?

Maintenant, je souhaite utiliser fprintf pour écrire dans le flux 1 ou 2, mais mon programme ne semble pas recevoir quoi que ce soit de l'autre côté du canal. J'ai essayé d'utiliser printf(), mais je ne suis pas sûr si cela écrit sur stdout ou stream 1 par défaut. S'il écrit dans le flux 1, je suppose que c'est un problème quelque part plus profond dans mon code.

Essentiellement, je demande, étant donné un int représentant le flux, comment puis-je obtenir un FICHIER * approprié pour une utilisation dans fprintf()?

Répondre

6

Si vous avez un descripteur de fichier et que vous voulez un FILE*, vous pouvez utiliser fdopen

FILE *fdopen(int fd, const char *mode); 

fdopen est une fonction Posix et documentée dans man fdopen. Pour faire le contraire, vous pouvez utiliser fileno

+0

Fermez-vous le descripteur, le pointeur FILE, ou les deux? – Bernard

+0

Le descripteur de fichier reste ouvert jusqu'à ce que vous sépariez le flux, à quel point il fermera le descripteur de fichier en fonction de la page de manuel. –

Questions connexes