Problème de pipe (grrrr)

Problème de pipe (grrrr) - C - Programmation

Marsh Posté le 26-06-2003 à 18:32:30    

Bon je comprend plus rien  :fou:  
 
je m'explique :
 
j'ai un processus ./Htbl_main
dans lequel je créé une pipe et l'ouvre

Code :
  1. if( mknod("Htbl", S_IFIFO | 0666, 0) == EXIT_FAILURE)
  2.  erreur("impossible de cree pipe Htbl\n" );
  3. if( (pipe_Htbl = open("Htbl", O_RDONLY)) == EXIT_FAILURE )
  4.  erreur("ouverture de pipe Htbl\n" );


 
Quand je lance Htbl_main dans un terminal pas de prob mon pipe est créé dans mon FS et il est dailleur visible depuis mon explorateur par contre EXACTEMENT le même exe lancé appartir d'un processu ./init ne me renvoit pas d'erreur lor de la création mais le pipe n'est pas créé dans mon FS(!) et le prog plante a l'ouverture!???????????????
 
ça doit bien fair 3heures que je suis dessus et vraiment je capte pas du tout ce qui pourrai bien en être la cause!?
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <errno.h>
  5. #include <sys/wait.h>
  6. int main (void)
  7. {
  8. pid_t pid_fils;
  9. gid_t gid;
  10. setgid(gid);
  11. do {
  12.  pid_fils = fork ();
  13. } while ((pid_fils == -1) && (errno == EAGAIN));
  14. if (pid_fils == -1) {
  15.  fprintf (stderr, "fork() impossible, errno=%d\n", errno);
  16.  return (1);
  17. }
  18. if (pid_fils == 0) {
  19.  // processus fils
  20.  fprintf (stdout, "fils : lancement de gestion_connections_clients\n" );
  21.  system("xterm -bd black -bg black -fg green -geometry 80x15+75+100 -T Serveur  -e ./serveur&" );
  22.  system("xterm -bd black -bg black -fg green -geometry 80x15+75+550 -T Admin  -e ./admin" );
  23. }
  24. else {
  25.  // processus père
  26.  fprintf (stdout, "père : lancement de gestion Hashing table\n" );
  27.  system("xterm -bd black -bg black -fg green -geometry 80x15+75+325 -T Htbl_main  -e ./Htbl_main" );
  28. }
  29. kill(getppid(), 0);
  30. if(!pid_fils)
  31.  unlink("Htbl" );
  32. return (EXIT_SUCCESS);
  33. }


 

Reply

Marsh Posté le 26-06-2003 à 18:32:30   

Reply

Marsh Posté le 26-06-2003 à 18:39:20    

bah, un claque sur les fesses et voilà :D  
 
(2sec, j'édites)
 
EDIT:
c'est quoi ces EXIT_FAILURE dans tes tests? si mknod merde, il renvoie canoniquement -1
 
et ça c'est louche
 
 kill(getppid(), 0);
if(!pid_fils)
 unlink("Htbl" );
 
c'est quoi ce kill? pourquoi de pas dire au pere d'attendre que les fils terminent avec un wait, puis supprimer le pipe.
 
 
les system c'est pas mal, ce la dit, comme tu t'en sers pour lancer des processus en taches de fond dans un cas ou soit pour executer un seul et unique processus, moi j'aurais plutot procéder avec d'autres fork et recouvrement. mais bon, c'est valide


Message édité par Taz le 26-06-2003 à 18:47:49
Reply

Marsh Posté le 26-06-2003 à 18:59:08    

pour le EXIT_FAILLURE c'tai juste comme ça me disait ke c'tai mieux mais j'en suis pas du tout convaincu ; je me disait que c'tai plus portable si un kernel revoyait -2 y sufirrai de redefinir EXIT_FAILLURE, fin, je pensai que ça servai plus ou moins à ça !?  
 

Citation :

et ça c'est louche  
 
kill(getppid(), 0);  
if(!pid_fils)  
unlink("Htbl" );  


moi aussi je trouve ça louche  :D , non en fait l'idée c'est que ./serveur est dans une boucle infini et ke Htbl_main verifie juste l'état d'un semaphor ke Admin peu basculer si le semaphore est basculé ./Admin revient dans init et j'aimerai autant que se soit ./Htbl_main qui unlink son pipe...
 
le kill tue tout les processus du même groupe (dont init est le leader)
 
EN ecrivant ce post j'ai trouvé le stress!!! :D :D :D :D
 
Merci!!! c'tai une connerie; pfff 3H pour ça; c'est decourageant  :sweat:  
 
Merci ++Taz  
 
ps: je croit k'on aura l'occasion de se recroiser sur ce forum pendant ces vacances  ;)


Message édité par peak le 26-06-2003 à 19:00:11
Reply

Marsh Posté le 26-06-2003 à 21:09:49    

Citation :

Sujet : Problème de pipe (grrrr)


C'est sur que si tu montres les dents ....

Reply

Marsh Posté le 26-06-2003 à 21:14:50    

c'est quoi déjà la blague...
 
c'e'st une fille un peu timide qui sait pas trop comment faire. son copain, tres motivé: 'c'est simple: tu n'as qu'a dire honolulu'. Le grand moment arrive, mademoiselle se lance et là  %% crac %% Aïïïïïïïïïeeee:fou:  :fou:  :fou: . 'désolée, je savais plus quoi dire, alors je me suis dit que Carcassone, ça devait marcher aussi'
 
 :D    [:spamafote]

Reply

Marsh Posté le 26-06-2003 à 21:20:34    

++Taz a écrit :

c'est quoi déjà la blague...
 
c'e'st une fille un peu timide qui sait pas trop comment faire. son copain, tres motivé: 'c'est simple: tu n'as qu'a dire honolulu'. Le grand moment arrive, mademoiselle se lance et là  %% crac %% Aïïïïïïïïïeeee:fou:  :fou:  :fou: . 'désolée, je savais plus quoi dire, alors je me suis dit que Carcassone, ça devait marcher aussi'
 
 :D    [:spamafote]  


[++++]  
 
Bon, faudrait quand même que je lise sa question et que je voie si je peux pas y répondre avant de me faire plonker pour blablatage !

Reply

Marsh Posté le 26-06-2003 à 21:24:05    

Peak a écrit :


Quand je lance Htbl_main dans un terminal pas de prob mon pipe est créé dans mon FS et il est dailleur visible depuis mon explorateur par contre EXACTEMENT le même exe lancé appartir d'un processu ./init ne me renvoit pas d'erreur lor de la création mais le pipe n'est pas créé dans mon FS(!) et le prog plante a l'ouverture!???????????????


système de fichier encore en read-only au moment du lancer de processus (bientôt interdit par l'ONU d'ailleur) ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed