select() et FIFO - C - Programmation
Marsh Posté le 16-06-2007 à 21:30:37
ITM a écrit : Salut ! |
Bonne question Calaghan !!!
A mon avis, si ton processus a ouvert ton fifo en mode "w", alors ton select lancé depuis le processus verra le fifo disponible pour l'écriture.
Maintenant, si tu écrits dedans (via un fwrite par exemple), alors ta fonction d'écriture sera bloquée jusqu'à ce qu'un autre processus vienne lire le fifo...
Marsh Posté le 17-06-2007 à 00:00:40
Sve@r a écrit : Bonne question Calaghan !!! |
Bein je pense comme toi aussi, mais j'aimerais en être sur..
Pour le dernier point y'a pas de soucis, c'est justement ce que je veux éviter. Ecrire en mode non bloquant, concrètement ça change quoi si l'autre en face ne lit pas? Le paquet est perdu ou pas?
Marsh Posté le 17-06-2007 à 12:09:28
ITM a écrit : Bein je pense comme toi aussi, mais j'aimerais en être sur.. |
Faut tester
ITM a écrit : c'est justement ce que je veux éviter. Ecrire en mode non bloquant, concrètement ça change quoi si l'autre en face ne lit pas? Le paquet est perdu ou pas? |
Si tu écrits en mode non bloquant et que ça ne peut pas se faire, ta fonction d'écriture te renvoie une erreur (NULL ou -1 selon la fonction) et errno est positionné à EAGAIN.
Etant donné que ça ne s'est pas fait, ce que t'as écrit est perdu.
Marsh Posté le 28-06-2007 à 14:28:01
A mon avis, c'est le kernel qui gère.
Quelque soit le type de tunnel, les données écrites sont comme 'entassé' juste avant la sortie du tunnel, et celui au bout peut lire quand lit veut ou alors on lui indique qu'il y a qqchose à lire.
Donc, un FIFO, c'est comme le reste, on balance tant que le FIFO est connecté, mais pas obligé que l'autre en face soit en lecture.
Marsh Posté le 28-06-2007 à 15:33:51
J'aurais dit qu'on peut écrire dans un fifo même si l'autre ne lit pas... Ce que tu écris est bufferisé par le kernel.
Edit : ah oui c'est ce que tu viens de dire en fait.
Marsh Posté le 16-06-2007 à 17:39:20
Salut !
Une ptite question rapide :
la fonction select permet de voir si des descripteurs sont disponibles immédiatement en écriture (entre autres bien sur)
Dans le cas d'un FIFO, ça donne quoi? Il faut qu'un autre process soit en read sur le FIFO ou juste que le FIFO soit ouvert en écriture ?
merci
---------------
iteme.free.fr | Mon feedback