Cest Magic !-De père en fils. Trouver une séance. Trouver une séance. Séance par villes. Asnieres sur seine (3) Colomiers (2) Toulouse (2) Cabourg (1) Callac (1) Carcassonne (1) Chalons en champagne (1) Cruas (1) Fronton (1) Le croisic (1) Mamers (1) Montmorillon (1) Paris (1) Poitiers (1) Saint calais (1) Thiviers (1) Ugine (1) Regarder en streaming Vos avis. Notez ce
Forums des Zéros Une question ? Pas de panique, on va vous aider ! Accueil > Forum > Programmation > Langage C > Communication processus père et fils [Système/C] Liste des forums Ce sujet est fermé. 9 mars 2017 à 112100 Bonjour, Je me permets de vous solliciter pour créer l'architecture de mon programme. Je souhaite créer à partir d'un processus père, 10 processus fils père commun, ppid identique avec autant de tubes que de processus fils pour que les fils puisse communiquer avec le père. La communication doit s'effectuer dans les deux sens. Le soucis, c'est que je ne vois pas comment m'y prendre comme je viens de commencer à manipuler les processus. Dans un premier temps, j'ai crée un père et un processus fils. J'envoie un message à partir du père et j'ai testé la réception du message par le processus fils. Le but, c'est que je puisse envoyer un message à 10 processus fils maintenant et qu'ils puissent confirmer la réception du message en renvoyant un message de confirmation au processus père include include include include int mainvoid { //Variables char *messageEcrire = mallocsizeofchar; pid_t pid_fils; int descripteurTube[2]; pipedescripteurTube; ifpipedescripteurTube != 0 { fprintfstderr, "Erreur de création du tube.\n"; return EXIT_FAILURE; } pid_fils = fork; ifpid_fils == -1 { fprintfstderr, "Erreur de création du processus.\n"; return 1; } ifpid_fils == 0 { closedescripteurTube[1]; readdescripteurTube[0], messageEcrire, sizeofmessageEcrire; printf"Le fils affiche %s \n", messageEcrire; }else{ closedescripteurTube[0]; sprintfmessageEcrire, "Bonjour"; writedescripteurTube[1], messageEcrire, sizeofmessageEcrire; waitNULL; } return EXIT_SUCCESS; } Je vous remercie par avance. 9 mars 2017 à 160119 Salut C'est simple tu fais ce que tu as fais, et tu le copies 9 fois Et plus concrètement tu peux partir par exemple avec un tableau de 10 cases qui contiennent disons le pipe, le PID du fils, ainsi que "l'index du processus". typedef struct child_worker_s { unsigned cw_id; pid_t cw_pid; int cw_pipe[2]; } child_worker_t; child_worker_t child_workers[10]; unsigned id; int i; for i = 0, id = 0; i fils et l'autre pour fils->père. Voici un exemple de comment j'aurai fait, mais je ne l'aurai jamais ecrit comme ca si je dois utiliser une communication dans les 2 sens et que j'ai le droit d'utiliser autres moyens beaucoup plus adaptes. Ici c'est juste pour montrer rapidement que c'est faisable, moche mais que ca marche. Et oui dans mon code précédent, j'ai voulu aller un peu trop vite, c'est uniquement le père qui doit fork. include include include include enum { P2C = 0, C2P, PIPE_NR }; enum { FD_IN = 0, FD_OUT, FD_NR }; typedef struct child_worker_s { unsigned cw_id; pid_t cw_pid; int cw_pipe[PIPE_NR][FD_NR]; int cw_child_fd[FD_NR]; int cw_parent_fd[FD_NR]; } child_worker_t; int child_handlerint id, int fds[FD_NR] { char buf[256]; int ret; ret = readfds[FD_IN], buf, sizeofbuf - 1; if ret < 0 return -1; buf[ret] = '\0'; fprintfstderr, "CHILD[%d] read '%s'\n", id, buf; writefds[FD_OUT], "OK", 3; return 0; } int main { child_worker_t child_workers[10]; unsigned id; int i; for i = 0, id = 0; i < 10; i++, id++ { pid_t pid; child_workers[id].cw_id = id; if pipechild_workers[id].cw_pipe[P2C] != 0 pipechild_workers[id].cw_pipe[C2P] != 0 break; /* Pour faciliter l'utilisation plus tard */ child_workers[id].cw_child_fd[FD_IN] = child_workers[id].cw_pipe[P2C][FD_IN]; child_workers[id].cw_child_fd[FD_OUT] = child_workers[id].cw_pipe[C2P][FD_OUT]; child_workers[id].cw_parent_fd[FD_IN] = child_workers[id].cw_pipe[C2P][FD_IN]; child_workers[id].cw_parent_fd[FD_OUT] = child_workers[id].cw_pipe[P2C][FD_OUT]; pid = fork; if pid == 0 { closechild_workers[id].cw_pipe[P2C][FD_OUT]; closechild_workers[id].cw_pipe[C2P][FD_IN]; return child_handlerid, child_workers[id].cw_child_fd; } else { closechild_workers[id].cw_pipe[P2C][FD_IN]; closechild_workers[id].cw_pipe[C2P][FD_OUT]; child_workers[id].cw_pid = pid; } } for i = 0; i < 10; i++ writechild_workers[i].cw_parent_fd[FD_OUT], "msg from parent", 16; for i = 0; i < 10; i++ { char buf[256]; int ret; ret = readchild_workers[i].cw_parent_fd[FD_IN], buf, sizeofbuf - 1; if ret < 0 continue; buf[ret] = '\0'; fprintfstderr, "PARENT read '%s' from child %u\n", buf, i; } for i = 0; i < 10; i++ waitpidchild_workers[i].cw_pid, NULL, 0; return 0; } 6 avril 2017 à 142806 J'ai compris = ! Merci beaucoup Padawel 12 novembre 2019 à 172402 bonjour, je veut un programme entre processus pipe le père envoie un fichier a son fils et le fils lui envoie un message qui contient que le message a été bien reçu c urgent 12 novembre 2019 à 173054 Bonjour, Déterrage Citation des règles générales du forum Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir. Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet. Au lieu de déterrer un sujet il est préférable soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message" soit de créer un nouveau sujet décrivant votre propre contexte ne pas répondre à un déterrage et le signaler à la modération Je ferme ce sujet. En cas de désaccord, me contacter par MP.CinémaLe Saint Laurent - C'EST MAGIC ! - DE PÈRE EN FILS - Modes d'emploi A propos Mes favoris Notifications Se connecter. Changer de ville. C'EST MAGIC ! - DE PÈRE EN FILS. Cinéma Saint-Laurent, Rue du 11 Novembre, Blain, France. Le dimanche 17 avril 2022 à partir de 11h. En savoir plus. Partager l'événement . Cinéma Le Saint Laurent - C'EST MAGIC ! - DE
Synopsis Il n’est jamais très bon qu’un Gruffalo, père ou fils, se montre dans le grand bois profond. Il pourrait être poursuivi par la Grande Méchante Souris. Mais entre un Gruffalo et une souris, lequel des deux est le plus effrayant ?Durée 00h53Origine FranceAnnée 2022Programmation Partager