J'ai quelques problèmes avec une fonction de la bibliothèque. Je dois écrire un code C qui utilise une fonction de bibliothèque qui affiche à l'écran ses étapes internes. Je ne suis pas intéressé par sa valeur de retour, mais seulement par les étapes imprimées. Donc, je pense que je dois lire à partir de la sortie standard et copier les chaînes lues dans un tampon. J'ai déjà essayé fscanf et dup2 mais je n'arrive pas à lire depuis la sortie standard. Quelqu'un peut-il m'aider ?
Réponses
Trop de publicités?
Linas
Points
489
Une version étendue de la réponse précédente, sans utiliser de fichiers, et en capturant stdout dans un tuyau, à la place :
#include <stdio.h>
#include <unistd.h>
main()
{
int stdout_bk; //is fd for stdout backup
printf("this is before redirection\n");
stdout_bk = dup(fileno(stdout));
int pipefd[2];
pipe2(pipefd, 0); // O_NONBLOCK);
// What used to be stdout will now go to the pipe.
dup2(pipefd[1], fileno(stdout));
printf("this is printed much later!\n");
fflush(stdout);//flushall();
write(pipefd[1], "good-bye", 9); // null-terminated string!
close(pipefd[1]);
dup2(stdout_bk, fileno(stdout));//restore
printf("this is now\n");
char buf[101];
read(pipefd[0], buf, 100);
printf("got this from the pipe >>>%s<<<\n", buf);
}
Génère la sortie suivante :
this is before redirection
this is now
got this from the pipe >>>this is printed much later!
good-bye<<<
Paul Rubel
Points
13132
BLUEPIXY
Points
18514
Utilisateur non enregistré
Points
0