Cela dépend de ce que vous entendez et ce que la plate-forme que vous utilisez. Très souvent, vous pouvez accomplir cela à partir de la ligne de commande, qui a été couverte dans une autre réponse. Si vous utilisez cette méthode pour cela, sachez que FILE * stderr
est généralement écrit immédiatement (sans tampon) tandis que FILE * stdout
peut être mis en mémoire tampon (généralement en ligne) de sorte que certains de vos messages d'erreur semblent avoir été imprimés plus tôt que certains d'autres messages, mais les autres messages sont en train d'être imprimés en retard.
A partir d'un programme C, vous pouvez également faire quelque chose de similaire dans le système en utilisant stdio freopen
, qui l'effet FILE *
, de sorte que vous pouvez faire imprimer fprintf(stderr, "fungus");
à quelque chose en plus ce que stderr normalement à imprimer. Mais si vous voulez savoir comment rediriger les descripteurs de fichiers réels sous un système de type Unix, vous devez en savoir plus sur les appels système dup
et dup2
. Ils vous permettent de dupliquer un descripteur de fichier.
int fd = open("some_file", O_WRONLY);
dup2(2,fd);
close(fd);
Ce code fera de "some_file" le nouveau stderr au niveau du système d'exploitation. L'appel dup2 se fermera et remplacera le descripteur de fichier 2 (stderr, qui est habituellement utilisé par FILE * stderr
mais pas nécessairement si vous appelez freopen(x,y,stderr)
puisque cela peut faire FILE *stderr
utiliser un descripteur de fichier différent).
Voici comment les programmes shell redirigent l'entrée et la sortie des programmes. L'ouverture de tous les fichiers dont le nouveau programme aura besoin, fork
, puis l'enfant utilise dup2
pour configurer les descripteurs de fichiers pour le nouveau programme, puis il ferme tous les fichiers dont le nouveau programme n'aura pas besoin (en laissant simplement 0, 1, et 2 ouvert), puis utilise l'une des fonctions exec pour devenir le programme que le shell a été dit d'exécuter. (une partie de ceci n'est pas tout à fait exacte parce que certaines coquilles peuvent s'appuyer sur des drapeaux exe proches)
Ce n'est pas une question de programmation et une réponse correcte est très dépendante de votre environnement. Voter pour passer à superuser.com. –
Pourquoi ce n'est pas une question liée à la programmation ?? Les sorties peuvent être redirigées à partir du code C! – Donotalo
Il devrait revenir à StackOverflow. La réponse avec la plupart des upvotes est liée à la programmation. Rien à voir avec le lot. – BrunoLM