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 :
$ ./serverDu 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 > STARTEt 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