Pourquoi mon named pipe est toujours en mode line buffered ?
2 réponses
Eric Bart
Bonjour,
Sous linux je crée un named pipe
mkfifo("PIPE",0666);
Après un fork() j'ai
int iFifo = open("PIPE", O_RDONLY);
iLus = read(iFifo,cBuff,19);
ou
iFifo = open("PIPE", O_WRONLY);
int iRes = write(iFifo,cBuff,size);
Mais le read n'est immédiat que si je termine le buffer
transmis par un "\n"
J'ai essayé de transformer le fd en stream avec fdopen() et
d'empêcher le line-buffer avec setbuf() mais ça ne marche pas.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Eric Bart
Le "line buffered", ca ne s'applique qu'a stdio, pas aux appels systeme read ou write. M'est avis que le buffering que tu observes est au niveau du printf ou puts que tu utilises pour afficher le resultat du read.
Hompfffff ... Ben oui. Merci. Bien vu et bravo.
Je faisais un cout << ... avec un cerr << ... le problème disparait. cerr n'est pas en line buffered.
Pffff.
Le "line buffered", ca ne s'applique qu'a stdio, pas aux appels
systeme read ou write. M'est avis que le buffering que tu
observes est au niveau du printf ou puts que tu utilises pour
afficher le resultat du read.
Hompfffff ... Ben oui. Merci. Bien vu et bravo.
Je faisais un cout << ...
avec un cerr << ...
le problème disparait. cerr n'est pas en line buffered.
Le "line buffered", ca ne s'applique qu'a stdio, pas aux appels systeme read ou write. M'est avis que le buffering que tu observes est au niveau du printf ou puts que tu utilises pour afficher le resultat du read.
Hompfffff ... Ben oui. Merci. Bien vu et bravo.
Je faisais un cout << ... avec un cerr << ... le problème disparait. cerr n'est pas en line buffered.
Pffff.
Stephane Chazelas
2004-05-25, 11:22(+02), Eric Bart:
Sous linux je crée un named pipe mkfifo("PIPE",0666);
Après un fork() j'ai int iFifo = open("PIPE", O_RDONLY); iLus = read(iFifo,cBuff,19); ou iFifo = open("PIPE", O_WRONLY); int iRes = write(iFifo,cBuff,size);
Mais le read n'est immédiat que si je termine le buffer transmis par un "n"
J'ai essayé de transformer le fd en stream avec fdopen() et d'empêcher le line-buffer avec setbuf() mais ça ne marche pas. [...]
Le "line buffered", ca ne s'applique qu'a stdio, pas aux appels systeme read ou write. M'est avis que le buffering que tu observes est au niveau du printf ou puts que tu utilises pour afficher le resultat du read.
-- Stephane
2004-05-25, 11:22(+02), Eric Bart:
Sous linux je crée un named pipe
mkfifo("PIPE",0666);
Après un fork() j'ai
int iFifo = open("PIPE", O_RDONLY);
iLus = read(iFifo,cBuff,19);
ou
iFifo = open("PIPE", O_WRONLY);
int iRes = write(iFifo,cBuff,size);
Mais le read n'est immédiat que si je termine le buffer
transmis par un "n"
J'ai essayé de transformer le fd en stream avec fdopen() et
d'empêcher le line-buffer avec setbuf() mais ça ne marche pas.
[...]
Le "line buffered", ca ne s'applique qu'a stdio, pas aux appels
systeme read ou write. M'est avis que le buffering que tu
observes est au niveau du printf ou puts que tu utilises pour
afficher le resultat du read.
Sous linux je crée un named pipe mkfifo("PIPE",0666);
Après un fork() j'ai int iFifo = open("PIPE", O_RDONLY); iLus = read(iFifo,cBuff,19); ou iFifo = open("PIPE", O_WRONLY); int iRes = write(iFifo,cBuff,size);
Mais le read n'est immédiat que si je termine le buffer transmis par un "n"
J'ai essayé de transformer le fd en stream avec fdopen() et d'empêcher le line-buffer avec setbuf() mais ça ne marche pas. [...]
Le "line buffered", ca ne s'applique qu'a stdio, pas aux appels systeme read ou write. M'est avis que le buffering que tu observes est au niveau du printf ou puts que tu utilises pour afficher le resultat du read.