Guest User

Untitled

a guest
May 22nd, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.46 KB | None | 0 0
  1. /* Programme qui
  2.    - initialise les ressources necessaires
  3.    - lance les programmes
  4.    - gere les differentes Borne
  5.    - ...
  6.    In.Pr.E.S.
  7.    Controle.c
  8. */
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <unistd.h>
  13. #include <signal.h>
  14. #include <errno.h>
  15. #include <sys/ipc.h>
  16. #include <sys/msg.h>
  17.  
  18. #include "fctTrace.h"
  19.  
  20. #include <sys/types.h>
  21. #include <sys/stat.h>
  22. #include <fcntl.h>
  23.  
  24. #define PROCESS   "Controle"
  25. #define IDQ       (key_t)1909
  26. #define IDQ_2       (key_t)1709
  27.  
  28. #include "Commun.dat"
  29. #include "Donnee.dat"
  30.  
  31. MESSAGE     MessageLu;
  32. //#include "fichier.ini"
  33.  
  34.  
  35. void Handler(int);
  36. void Sortie(int);
  37.  
  38. int            idQ,idQ2;
  39.  
  40. int main()
  41. {
  42.  
  43. struct sigaction Action;
  44. int            idChemin,rc,compteur = 0,i=0,IdGroupe;
  45. char           szQueue[10];
  46. pid_t          idPid;
  47.  
  48.  
  49.  
  50. /* # Redirection */
  51.  
  52. int desc;
  53.  
  54.  
  55. if((desc = open("Trace.log", O_RDWR | O_CREAT, 0644)) == -1)
  56. {
  57.     TraceErr(__LINE__,__FILE__,"Erreur de Redirection");
  58.         exit(1);
  59. }
  60.  
  61.  
  62. dup2(desc,2);
  63.  
  64.  
  65.  
  66.  
  67. /* Armement des signaux */
  68. Trace("(Controle) Armement des signaux...");
  69.  
  70. Action.sa_handler = Handler;
  71. sigemptyset(&Action.sa_mask);
  72. Action.sa_flags = 0;
  73.  
  74. if (sigaction(SIGINT,&Action,NULL) == -1)
  75.    { TraceErr(__LINE__,__FILE__,"Err. de sigaction()");
  76.      exit(1);
  77.    }
  78.  
  79. Trace("(Controle) Creation des ressources necessaires...");
  80.  
  81. if ((idQ = msgget(IDQ,IPC_CREAT | IPC_EXCL | 0600)) == -1)
  82.    { TraceErr(__LINE__,__FILE__,"Err. de creation de la 1ere queue...\n");
  83.      exit(1);
  84.    }
  85. Trace("(Controle) Creation file de message OK");
  86.  
  87. // initialiser la station .
  88. // ....
  89.  
  90. while (1)
  91.    {
  92.      idPid = 1;
  93.      Trace("(Controle) attend");
  94.      if ((rc = msgrcv(idQ,&MessageLu,sizeof(MESSAGE) - sizeof(long), 0,0)) < 0)
  95.         { TraceErr(__LINE__,__FILE__,"Err. de reception d'un message...");
  96.           Sortie(1);
  97.         }
  98.      switch (MessageLu.Requete)
  99.         { case IDENTIFICATION:
  100.              Trace("(Controle) Demande d'identification");
  101.  
  102. //# msgsnd() ....
  103.         if(compteur == 0)
  104.         {
  105.             Trace("(CONTROLE) AVANT - GID = %d\n",(int)getpgrp());
  106.             compteur++;
  107.             IdGroupe = MessageLu.idProcess;
  108.             setpgid(getpid(),IdGroupe); // s'associe au groupe du premier QtMetro
  109.             Trace("(CONTROLE) APRES - GID = %d\n",(int)getpgrp());
  110.         }
  111.         else
  112.         {
  113.             MessageLu.idProcess = IdGroupe;
  114.         }
  115.         MessageLu.Requete = AFFICHEPUB;
  116.         //fflush(stdout);
  117.         Trace("(CONTROLE) Envoie du message");
  118.         if(rc = msgsnd(idQ,&MessageLu,sizeof(MessageLu)- sizeof(long),0) == -1)
  119.         {
  120.             TraceErr(__LINE__,__FILE__,"Err. d'envoi d'un message...");
  121.                 Sortie(1);
  122.             }
  123.             Trace("(CONTROLE) Envoie du message OK");
  124.             //MessageLu.Requete = AFFICHEPUB;
  125.            
  126.        
  127.              break;
  128.           case RECHERCHE:
  129.              Trace("(Controle) Demande de chemin vers %d",MessageLu.Message[1]);
  130.              if ((idChemin = fork()) == -1)
  131.                 { TraceErr(__LINE__,__FILE__,"Err. de fork()");
  132.                   Sortie(1);
  133.                 }
  134.              if (!idChemin)
  135.                 { /* processus fils   */
  136.                   sprintf(szQueue,"%d",idQ);
  137.                   execl("./Chemin","Chemin",szQueue,NULL);
  138.                   TraceErr(__LINE__,__FILE__,"Err. de execl du process Chemin");
  139.                 }
  140.  
  141.              MessageLu.lType = idChemin;
  142.              if (msgsnd(idQ,&MessageLu,sizeof(MessageLu) - sizeof(long),0) <0)
  143.                 { TraceErr(__LINE__,__FILE__,"Err. de msgsnd()");
  144.                   Sortie(1);
  145.                 }
  146.              break;
  147.           /*case AFFICHEPUB:
  148.              if(compteur !=0)
  149.             {
  150.                 Trace("(Controle) Entree dans AFFICHEPUB");
  151.                 if(compteur == 0)
  152.                 {
  153.                     IdGroupe = getpgrp();
  154.                 }
  155.            
  156.                 MessageLu.idProcess = IdGroupe;
  157.                 if(rc = msgsnd(idQ,&MessageLu,sizeof(int),0) == -1)
  158.             {
  159.                 TraceErr(__LINE__,__FILE__,"Err. d'envoi d'un message...");
  160.                 Sortie(1);
  161.                 }
  162.             }
  163.             break;
  164.            
  165.             if(rc = msgsnd(idQ,&MessageLu,sizeof(MessageLu.idProcess)+ sizeof(long),0) == -1)
  166.         {
  167.             TraceErr(__LINE__,__FILE__,"Err. d'envoi d'un message...");
  168.                 Sortie(1);
  169.             }*/
  170.           default:
  171.             break;
  172.         }
  173.  
  174.          
  175.    }
  176. }
  177.  
  178. void Sortie(int rcSortie)
  179. {
  180. if (msgctl(idQ,IPC_RMID,0))
  181.    TraceErr(__LINE__,__FILE__,"Err. de Suppression de IdRq");
  182. exit(rcSortie);
  183. }
  184.  
  185. void Handler(int Sig)
  186. {
  187. Sortie(Sig);
  188. }
Add Comment
Please, Sign In to add comment