Resolu[c/Linux]Comment recupérer les infos d'un pipe sans perte de don - C++ - Programmation
Marsh Posté le 27-03-2003 à 11:57:15
psebcopathe a écrit : |
On ne peut perdre des données dans un pipe (tout ce qui entre, doit sortir).
Si le pipe est plein, le processus écrivin est bloqué sur write. Si le pipe est vide, le processus lecteur est bloqué sur read ... SAUF si on utilise NONBLOCK, dans quel cas, les données du pipe sont écrasées par les nouvelles!
Conclusion: ...
Marsh Posté le 28-03-2003 à 17:01:46
psebcopathe a écrit : ok merci de ta reponse |
mea culpa: en cas d'un NOBLOCK et si le pipe est vide, la lecture (read) sort avec un "erreur" (non mortel). etc.
Donc, je pense que tes pertes viennent du fait que write ne peut écrire dans un tube plein, donc ces données passent à la trappe.
Notez: tout vient de NOBLOCK
Marsh Posté le 28-03-2003 à 19:23:19
le pb c'est que si je mets pas NOBLOCK , j'ai plus le son de mes chansons et le clavier freeze , elle est ou la connerie ?
Marsh Posté le 28-03-2003 à 19:43:24
le titre du topic me fais PTDR
Marsh Posté le 31-03-2003 à 23:59:09
up de minuit .
J'ai cherche et je n'ai tjs pas trouve , si qqu a une piste pour eviter le NO_BlOck et que ca puisse marcher , je suis preneur .
Marsh Posté le 01-04-2003 à 05:29:51
La primitive write retourne le nombre d'octects effectivement écrits, donc déjà ça te permet de vérifier où cloche ton prog (Est ce que tout est bien écrit dans le pipe), et dans ce cas, de pouvoir le corriger. Si tu sais combien d'octets tu as écrit, tu sais aussi combien tu n'en as pas écrit, donc lesquels tu dois renvoyer, le temps que le lecteur ait lu (et donc vidé) dans le pipe.
Marsh Posté le 01-04-2003 à 09:35:51
psebcopathe a écrit : up de minuit . |
Peut-être essayer d'ordonner mieux les process ...
Sinon, tu posissionne NOBLOCK et tu surveille les messages d'erreur de write (errno doit être égale à quelque chose ...)
Marsh Posté le 02-04-2003 à 17:19:57
OK , merci , c'est bon ca marche maintenant !
le seul changement effectué , a été de virer les NOBLOCK et dans la fonction "play" , de rajouter a la fin : "close (2);" et now ca rox sans pb .
Marsh Posté le 27-03-2003 à 11:03:24
Je m'explique mieux , MOn application lance un programme (mplayer pour lire les fichiers audios) avec fork et communique avec ceui ci par des pipes , le pb , c'est quand je récupère les données de e programmes, des fois , il en zappe certaines .
Hors je veux abolument les récupérér car ca me permet de détecter au niveua de mon appli quand il ya eu un changement de chanson .
voila le code , svp aidez moi .
Message édité par psebcopathe le 02-04-2003 à 17:20:27