Tu mets ton FD non-blocking, et avant d'écrire tu appelles select() en le passant dans le writing set: si tu peux écrire, écris, sinon bufferise.
Note que si le taux d'écriture de ton process est assez faible, tu peux utiliser un bête :
$ ./monprog | cat > log
cat va aussi bloquer sur certains write(), mais tant que le pipe n'est pas plein, ton process ne bloquera pas.
Il faut donc grosso modo que :
taux d'écriture < taille PIPE / blocage max de write
(valeurs typiques: taille PIPE = 64KB, blocage max de write ~ 1s avec un BUFSIZ de l'ordre de 8192)
# non-blocking I/O
Posté par neologix . En réponse au message Ecritures disques non bloquants. Évalué à 2.
Tu mets ton FD non-blocking, et avant d'écrire tu appelles select() en le passant dans le writing set: si tu peux écrire, écris, sinon bufferise.
Note que si le taux d'écriture de ton process est assez faible, tu peux utiliser un bête :
$ ./monprog | cat > log
cat va aussi bloquer sur certains write(), mais tant que le pipe n'est pas plein, ton process ne bloquera pas.
Il faut donc grosso modo que :
taux d'écriture < taille PIPE / blocage max de write
(valeurs typiques: taille PIPE = 64KB, blocage max de write ~ 1s avec un BUFSIZ de l'ordre de 8192)