#include #include #include /* A COMPLETER: ajout de directives #include */ #include #include #include #include #include #include #define BUFFER_SIZE 1024 #define NOMTUBESERVEUR "./client-serveur" #define N_IMAGES 10 #define INPUT_DIR "input_images" #define OUTPUT_DIR "output_images" char *input_images[] = { "billes.jpeg", "enfant.jpeg", "epices.jpeg", "fruits_et_legumes.jpeg", "lenna.jpeg", "montgolfiere.jpeg", "mouette.jpeg", "paon.jpeg", "saut.jpeg", "tulipes.jpeg" }; void submit_job( int image_index) { char input_filename[1024]; sprintf(input_filename, "%s/%s", INPUT_DIR, input_images[image_index]); char output_filename[1024]; char nomTubeClient[128]; /* Préparation de nomTubeClient (tube qui permettra les communications */ /* serveur->client) */ sprintf(nomTubeClient, "/tmp/serveur-client.%d", getpid()); /* A COMPLETER: créer et ouvrir le tube nommé nomTubeClient */ if (mkfifo(nomTubeClient, S_IRUSR|S_IWUSR) < 0) { if (errno != EEXIST) { perror("mkfifo(tube nommé client"); exit(EXIT_FAILURE); } else { printf("%s existe deja : on suppose que c'est un pipe nomme\n", nomTubeClient ); printf("et qu'on peut continuer le programme sans probleme\n"); puts(""); } } /* Ouverture de ce tube */ int fdR = open(nomTubeClient, O_RDWR); if (fdR == -1) { perror("open(tube nommé)"); exit(EXIT_FAILURE); } char requete[BUFFER_SIZE]; /* Envoi de la requête vers le serveur (la requete contient le nom du */ /* tube sur lequel la reponse est attendue) */ sprintf(requete,"%s\n%s", nomTubeClient, input_filename); /* A COMPLETER: ouvrir le tube nommé NOMTUBESERVEUR */ int fdW = open(NOMTUBESERVEUR, O_WRONLY); if (fdW == -1) { perror("open(NOMTUBESERVEUR)"); exit(EXIT_FAILURE); } /* A COMPLETER: envoyer requete au serveur */ int nbWrite = write(fdW, requete, sizeof(requete)); if (nbWrite < sizeof(requete)) { perror("pb ecriture sur pipe nomme"); } /* A COMPLETER: lire le nom du fichier résultat et l'afficher */ int nbRead = read(fdR, output_filename, sizeof(output_filename)); if (nbRead != sizeof(output_filename)) { printf("Communication avec le serveur probablement rompue\n"); exit(EXIT_FAILURE); } printf("Reponse du serveur = \"%s\"\n", output_filename); /* A COMPLETER (éventuellement): faire le ménage */ close(fdR); close(fdW); } int main() { int i; for(i=0; i