Sujet : Re: Problèmes bizarres de lecture dans un pipe (en C).
De : nicolas$george (at) *nospam* salle-s.org (Nicolas George)
Groupes : fr.comp.os.linux.configurationDate : 13. Dec 2022, 19:16:38
Autres entêtes
Organisation : Guest of ProXad - France
Message-ID : <6398c186$0$24817$426a74cc@news.free.fr>
References : 1
User-Agent : Flrn (0.9.20070704)
Olivier Miakinen , dans le message <
tnab3h$h7v$1@cabale.usenet-fr.net>,
a écrit :
1er problème : lorsque le père fait un read() avec un paramètre count
qui est plus grand que PIPE_BUF (c.-à-d. 4096), bien que le fils ait
déjà écrit beaucoup plus d'octets que ça, seuls PIPE_BUF octets sont
retournés par la commande read().
Ça c'est normal, et c'est même souhaitable, ça permet de faire du presque
bloquant qui marche. Personnellement je n'ai pas assez confiance que ce soit
portable, mais en théorie on peu compter dessus. Si tu veux lire une
certaine quantité, tu dois boucler.
2e problème plus grave : lorsque le père fait un read() avec un count
qui est plus *petit* que PIPE_BUF, ce sont bien seulement 'count'
octets qui lui sont retournés, mais au total PIPE_BUF octets sont
effacés du pipe ! Les (PIPE_BUF − count) octets restants sont perdus
et ne seront jamais récupérés par le père lors des read() suivants.
Là, je suis à peu près certain que tu hallucines. Tu peux montrer un strace
sur un exemple minimal ?