Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

2 réponses
Avatar
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)

2 réponses

Avatar
Éric Lévénez
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 -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Avatar
unbewusst.sein
Éric Lévénez wrote:

> 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)