/* Valeur retourner par clientnombre 1: nb trouve 2: nb pas trouve */
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <time.h> #include <errno.h> /*pour la fonction waitpid*/ #include <sys/types.h> #include <sys/wait.h> #include "creer_socket.h"
#define TRUE 1 struct sigaction action; pid_t pidfils; void eliminer_zombie(int sig) { int code,status; printf("pid fils %d\n",pidfils); code=waitpid(pidfils,&status,WNOHANG); printf("code %d\nstatus %d\n",code,status); if (code==1) printf("changer nombre\n"); else if (code==2) printf("garder nombre\n"); printf("Terminaison d'un processus de service\n"); wait(NULL); }
int nombre() { int nb; srand(time(NULL)); nb=rand()%100; printf("Voici le nombre:%d\n",nb); return nb; }
int client_nombre(int socket_service, int n) { int socketclt; char status[1024]; int nbclt; int nb,stat; nb=n; socketclt= socket_service; ecrire_socket(socketclt,"ok1\n"); lire_socket(socketclt,status); setsid(); printf("Fils PID %d \n",getpid()); pidfils=waitpid(getpid(),&stat,WNOHANG); printf("test %d\n",pidfils); if(strncmp(status,"oui",3)==0) { ecrire_socket(socketclt,"ok2\n"); lire_socket(socketclt,status); nbclt=atoi(status); if (nbclt==nb) { ecrire_socket(socketclt,"ok3\n"); return 1; } else { ecrire_socket(socketclt,"ok4\n"); return 2; } } else if (strncmp(status,"non",3)==0) { ecrire_socket(socketclt,"ok5\n"); return 2; } else { ecrire_socket(socketclt,"ok6\n"); return 2; } }
int main(int argc, char* argv[]) { int nb; struct sockaddr_in adresse; int lg_adresse; int port, coderetour; /*valeur retourner par la fonction client nombre*/ int socket_ecoute,socket_service; if (argc!=2) { fprintf(stderr,"Nombre de parametres incorrect\n"); exit(2); } if(fork()!=0) exit(0); setsid(); printf("Serveur de PID %d lance\n",getpid()); action.sa_handler=eliminer_zombie; sigaction(SIGCHLD,&action,NULL); port=atoi(argv[1]); lg_adresse=sizeof(adresse); if((socket_ecoute=creer_socket_serveur(port))==-1) { fprintf(stderr,"creation socket ecoute impossible\n"); exit(2); } nb=nombre(); while (TRUE) { socket_service=accept(socket_ecoute,&adresse,&lg_adresse); if(socket_service==-1 && errno==EINTR) continue; if(socket_service==-1 && errno!=EINTR) { perror("Accept"); exit(2); } printf("Serveur: Connexion acceptee\n"); if(fork()==0) { close(socket_ecoute); coderetour=client_nombre(socket_service,nb); printf("Le Code retour est: %d\n",coderetour); close(socket_service); //return coderetour; exit(coderetour); } else { close(socket_service); } } printf("code retour %d\n",coderetour); return coderetour; }
Voit ce que tu peux faire avec ca @++
Chevalier Pheno Starboard, membre de la Freeman-Corp
------------------------------- Réponse au message : -------------------------------
> > > > > ------------------------------- > Réponse au message : > ------------------------------- > > > je recherche un programme sous Linux avec semaphores, fork, mémoires partagée >
|