Ce code prend 2 fichiers et place les résultats dans un troisième fichier. Cela fonctionne très bien, mais ce qui m'inquiète, c'est que le dernier printf n'imprime pas à l'écran. Le premier imprime très bien. Cela me dit que je n'ai pas restauré la sortie stdout correctement?Ne pas récupérer stdout
int main (int argc, char *argv[])
{
char *join[4]={"cat", "file1.txt","file2.txt", 0};
int id, fd, status;
printf("fd=%d\n", fd); //this one prints to screen
fd=dup(1); //save stdout
close(1); close stdout
FILE *out=fopen("output.c", "a"); //this is where the output should go
id=fork(); //0 for child
if (id>0) //parent process
{
waitpid(id, &status, WUNTRACED);
}
else if (id==0) //child process
{
execvp(join[0], join);
}
else //error
{
printf("error occured");
}
close(1);
dup2(fd, 1);
fclose(out);
printf("fd=%d\n", fd); //this one doesn't print to screen
return 0;
}
'fd' ne reçoit jamais de valeur, donc vous mettez une valeur indéfinie dans les fichiers de données. Après la fermeture, vous n'essayez jamais de restaurer la sortie d'origine, alors pourquoi voudriez-vous que cela fonctionne magiquement? – John3136
Votre code squelettique manque pas mal d'étapes importantes. Ce n'est pas un MCVE ([MCVE]), mais nous pouvons, à peu près, déterminer ce que vous faites et remplir les espaces vides. Il vaut mieux ne pas deviner et grimacer ce qui n'est pas fait (initialiser 'fd', par exemple, ou se demander quelle est la signification de' out'), et espérer le meilleur. –
Désolé, toujours nouveau pour cela. J'ai fait quelques modifications et je ne vois toujours pas la deuxième déclaration d'impression et maintenant je ne peux pas voir ce que je tape dans le terminal maintenant. Je pensais que j'ai restauré la sortie avec 'dup2 (fd, 1)'? –