stderr et stdout sont traitées de manière asynchrone ?

Le
unbewusst.sein
ce matin (beware je n'ai pas bu tout mon café) je constate qu'une sortie
vers stderr arrive avant l'erreur qui l'a produite et qui apparait donc
après sur stdout ?

donc stderr et stdout sont traités, bufferisés de manières asynchrones ?
c'est un peu normal vu que normalement, le gros du flux doit aller sur
stdout et qu'il est plus urgent de reporter les erreurs sur stderr,
c'est le principe ?
--
« Le meilleur moyen de tenir sa parole est de ne jamais la donner. »
(Napoléon Bonaparte)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Éric Lévénez
Le #22136831
Le 19/05/10 06:30, Une Bévue a écrit :

ce matin (beware je n'ai pas bu tout mon café) je constate qu'une sortie
vers stderr arrive avant l'erreur qui l'a produite et qui apparait donc
après sur stdout ?

donc stderr et stdout sont traités, bufferisés de manières asynchrones ?



Oui, stdout est bufferisée par défaut, pas stderr. Voir setbuf et fflush.

c'est un peu normal vu que normalement, le gros du flux doit aller sur
stdout et qu'il est plus urgent de reporter les erreurs sur stderr,
c'est le principe ?



Oui. Mais ce n'est pas une question d'urgence mis de sécurité. Une
sortie bufferisée peut ne pas sortir, comme :

printf("Hello world");

qui n'affichera rien. Ceci tant que le buffer interne ne sera pas plein,
tant que l'on aura pas utilisé fflush pour le vider ou tant que l'on
n'aura pas un n.

Pour une erreur, on veut l'afficher à coup sûr, et donc pas de
bufferisation.

--
Éric Lévénez -- Unix is not only an OS, it's a way of life.
unbewusst.sein
Le #22137041
Éric Lévénez
> donc stderr et stdout sont traités, bufferisés de manières asynchrones ?

Oui, stdout est bufferisée par défaut, pas stderr. Voir setbuf et fflush.




OK, merci beaucoup, setbuf me dit :
If a stream refers to a terminal (as stdout normally does),
it is line buffered.
The standard error stream stderr is always unbuffered.
--------------------------^^^^^^----^^^^^^^^^^^^^^^^^

> c'est un peu normal vu que normalement, le gros du flux doit aller sur
> stdout et qu'il est plus urgent de reporter les erreurs sur stderr,
> c'est le principe ?

Oui. Mais ce n'est pas une question d'urgence mis de sécurité. Une
sortie bufferisée peut ne pas sortir, comme :

printf("Hello world");

qui n'affichera rien. Ceci tant que le buffer interne ne sera pas plein,
tant que l'on aura pas utilisé fflush pour le vider ou tant que l'on
n'aura pas un n.

Pour une erreur, on veut l'afficher à coup sûr, et donc pas de
bufferisation.



OK, logique tout ça, c'est pourquoi j'avais pu "l'intuiter"...


--
« Le meilleur moyen de tenir sa parole est de ne jamais la donner. »
(Napoléon Bonaparte)
Publicité
Poster une réponse
Anonyme