Interface utilisateur ...

LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009 - 28 déc. 2007 à 21:38
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009 - 28 déc. 2007 à 21:41
Salut à tous,
J'ai encore besoin de vos services ! J'ai un petit soucis que je ne comprends pas trop. Pour l'école, je dois faire un programme que l'on doit contrôler à grâce à un prompt ... En fait, c'est un petit serveur bateau que l'on peut lancer (commande START), arrêter (commande STOP) et redémarrer (RESTART).
Concrêtement, on arrive dans le shell et on lance le serveur :
$ ./server
Du coup, c'est le prompt du serveur qui prends la main :
Serveur >
Et là, il suffit de lui taper ce que l'on veut faire (par exemple le lancer) :
Serveur > START
Et il fait ce qu'on lui demande ... 

Le truc, c'est que j'ai jamais fait ça ! Du coup, j'ai tenté quelque chose ... On fait un fork dès le départ : le processus père correspond alors à la boucle du serveur (un truc avec des sockets et tout ça, mais là c'est un autre problème ) et le processus fils correspond à la la boucle utilisateur (le prompt qui affiche serveur et tout et tout). Sauf qu'en fait ... Bah je sais plus comment faire. Quels moyens je dois mettre en oeuvre pour faire communiquer les 2 processus ? Les signaux ? Autre chose ? Quoi ?
En plus, le code suivant provoque une boucle infinie dès le lancement (chose qui ne se produisait pas avant que j'implémente le fork() ...). Donc si quelqu'un peut m'aider, je l'en remercie d'avance !

void runUIProcess()
{
   while(1)
   {
      int intUserCommand = -1;  
      intUserCommand = getUserCommand();
      if(intUserCommand == UNKNOWN_COMMAND) warnUser("Commande inconnue. ");
      if(intUserCommand == QUIT_PROGRAM_COMMAND)
      {
         informUser("Bye ! ");
         return;
      }
      executeServerCommand(intUserCommand);
   }
}

int main()
{
   int intServerProcessID = -1;
   intServerProcessID = getpid();  

   int intUIProcessID = -1;
   intUIProcessID = fork();  
   if(intUIProcessID == -1) raiseError("fork()");  
  
   if(intUIProcessID == 0)
   {
      intUIProcessID = getpid();
      runUIProcess();
      return EXIT_SUCCESS;     
   }
   else
   {
      printf("[%d] Je suis le processus Serveur ! \n", intServerProcessID);
   }
  
   return EXIT_SUCCESS;
}

LocalStone

2 réponses

LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
28 déc. 2007 à 21:39
Ha oui ! Je suis Ubuntu 7.04 ... Je sais pas si c'est bien utile de le préciser, mais on sait jamais !

LocalStone
0
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
28 déc. 2007 à 21:41
Et encore une chose ... Je vous fait grâce du code des fonctions du genre raiseError() et tout ça. Je pense que le nom est suffisement clair pour que j'ai à éviter d'expliquer chacune des fonctions !

LocalStone
0
Rejoignez-nous