Accueil > Forum > > > > file de message, pere-fils sous unix
file de message, pere-fils sous unix
dimanche 4 mars 2007 à 12:41:09 |
file de message, pere-fils sous unix

adri85
|
Bonjour, je souhaite que le processus père de mon application envoie 2 nombres entiers plus un opérande ( + - * / %) a un fils par le biais d'une file de message. mon problème est de passer les paramètres au fils par la file de mess car j'ai 2 int et 1 char!! Est ce que vous pouvez m'aider sur ce point svp merci
|
|
dimanche 4 mars 2007 à 22:13:59 |
Re : file de message, pere-fils sous unix

ShareVB
|
salut,
http://users.actcom.co.il/~choo/lupg/tutorials/multi-process/multi-process.html
à priori, dans msgbuf, tu mets ce que tu veux donc 2 int et 1 char par ex...
ShareVB
|
|
dimanche 4 mars 2007 à 22:14:28 |
Re : file de message, pere-fils sous unix

ShareVB
|
ou encore : http://www.dil.univ-mrs.fr/~massat/ens/docs/IPC.html
ShareVB
|
|
lundi 5 mars 2007 à 09:19:05 |
Re : file de message, pere-fils sous unix

adri85
|
Je sais qu'il est possible de mettre des infos de types différents mais je sais pas comment le faire
Normalement une structure msgbuf est de la forme : struct msgbuf { long mtype; char mtex[];}msg; Donc dans mtext je peux pas mettre de int!! Ce que j'ai fait c'est : struct msgbuf { long mtype; struct minfo { int mnombre[]; char mtext[]}msgdonnees;}msg;
A la compilation ça passe mais à l'éxécutioin j'ai une erreur de segmentation. Je sait pas d'où ça vient??
|
|
lundi 5 mars 2007 à 10:38:07 |
Re : file de message, pere-fils sous unix

ShareVB
|
salut, rien ne t'empeche de faire : struct msgbuf { long mtype; /* message type, a positive number (cannot be zero). */ char car; int i; int j; };
par contre tu ne dois pas inclure de pointeurs, il faut obligatoirement avoir des tableaux de tailles fixes...car msgsnd copie une zone mémoire... donc tu ne peux pas faire : struct msgbuf { long mtype; struct minfo { int mnombre[]; char mtext[]}msgdonnees;}msg; par contre, tu peux faire : struct msgbuf { long mtype; struct minfo { int mnombre[ 256]; char mtext[ 256]}msgdonnees;}msg; ShareVB
|
|
lundi 5 mars 2007 à 11:06:37 |
Re : file de message, pere-fils sous unix

adri85
|
salut,
C'est bien comme ça que je l'ai déclarée, nous sommes d'accord sur ce point. Donc mon erreur ne vient pas de là. Dans le msgsnd et msgrcv on a besoin de donnée la longeur du paramètre mtext. Donc vu que j'ai une structure minfo je fait : length = sizeoff(struct minfo) - sizeoff (long);
length est utilisé par le père et par le fils donc je l'ai déclarée et initialisée en globale ( en dehors de toute fonction). Je ne suis pas sur que ça soit ok et que mon erreur de segmentation ne vienne pas de là.
Qu'en pense tu?? merci pour ton aide
Adri85
|
|
lundi 5 mars 2007 à 12:12:20 |
Re : file de message, pere-fils sous unix

ShareVB
|
salut,
donne le code en entier s'il n'est pas trop gros (sinon en MP)...ca sera plus simple...
ShareVB
|
|
lundi 5 mars 2007 à 16:12:44 |
Re : file de message, pere-fils sous unix

adri85
|
je t'ai envoyer le code en message privé!! Je te laisse regarder si tu remarque des erreurs. Salut Adri85
|
|
lundi 5 mars 2007 à 17:48:07 |
Re : file de message, pere-fils sous unix

ShareVB
|
salut,
euh, je pense que tu ne devrais pas mélanger les signaux et les files de messages par ce que là, il y en a dans tous les sens...et les fils lancent des fils qui lancent des fils qui ne se terminent jamais donc...
le plus simple serait de faire : dans une boucle : -> un père qui demande les valeurs, les envoient au fils (msgsnd) , attend la réponse du fils (msgrcv), affiche le résultat -> un fils qui reçoit (msgrcv), qui calcule et renvoie le résultat (msgrcv) puis qui se TERMINE (return ou exit)
ou encore, créer le fils puis dans une boucle, envoyer les données au fils, calcul dans le fils, affichage dans le père
et le tout sans signaux...
ShareVB
|
|
lundi 5 mars 2007 à 20:30:00 |
Re : file de message, pere-fils sous unix

adri85
|
j'ai essayé un nouveau code comme tu me l'as conseillé. Cependant l'exe reste bloquée sur scanf ( "%c", operation); #include <string.h> #include <stdlib.h> #include <stdio.h> #include <ctype.h> #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <sys/wait.h> #include <sys/time.h>
#define CLEF_REQUETES 0x00012347 #define LG_MAX 512
struct msgform { long mtype; //type de message struct minfo { int mnombre[3]; //nombres char mtext; //opérande }donnees; } msg;
int res; int frequete; int length;
int main(int argc,char *argv[]) { pid_t fils; int nombre1; int nombre2; char operation; int status;
//On crée une file de message frequete = msgget(CLEF_REQUETES, IPC_CREAT | 0700); if (frequete == -1) { perror("msgget"); return (EXIT_FAILURE);}
msg.mtype = getpid();
while (1) { //on demande à l'utilisateur l'opération à effectuer printf("entrez nombre1\n"); scanf("%d", &nombre1);
printf("entrez nombre2\n"); scanf("%d", &nombre2);
printf("opération : +,-,*,/ ?\n"); scanf("%s", operation); printf("aaa"); //on récupère le texte msg.donnees.mnombre[0] = nombre1; msg.donnees.mnombre[1] = nombre2; msg.donnees.mtext = operation; printf("ddd"); //On créé le fils fils = fork();
if (fils < 0) { printf("erreur au fork"); return (EXIT_FAILURE);}
//Si on est dans le père if (fils > 0) { //On envoie le message sur la file de message res = msgsnd(frequete, & msg, length + 1, 0); if (res == -1) { perror("msgsnd"); return (EXIT_FAILURE);}
waitpid(fils,&status,0); //on récupère les infos sur la file de message res = msgrcv(frequete, & msg,length , getpid(), 0); if (res == -1) { perror("msgrcv"); exit(0); }
//On affiche le message traduit printf("result : %d\n", msg.donnees.mnombre[2]); }
//Si on est dans le fil if ( fils == 0) { //on récupère les infos de la file de message res = msgrcv(frequete, & msg,length , getpid(), 0); if (res == -1) { perror("msgrcv"); exit(0); } switch(msg.donnees.mtext) { case '+' :res = msg.donnees.mnombre[0] + msg.donnees.mnombre[1];break; case '-' :res = msg.donnees.mnombre[0] - msg.donnees.mnombre[1];break; case '*' :res = msg.donnees.mnombre[0] * msg.donnees.mnombre[1];break; case '/' :if(msg.donnees.mnombre[1] != 0) { res = msg.donnees.mnombre[0] / msg.donnees.mnombre[1];} else {printf("division par 0 interdite"); exit(0);}break; /*case '%' :res = (msg.minfo.mnombre[0] * msg.minfo.mnombre[1])/100; break;*/ } msg.donnees.mnombre[2] = res; if( msgsnd(frequete, & msg, length + 1, 0) == -1) { perror("msgsnd"); exit(0);} exit(0); } } }
|
|
Cette discussion est classée dans : message, file, fils, pere, unix
Répondre à ce message
Sujets en rapport avec ce message
file de message [ par hobbes ]
Bonjour,J'ai une application composée de deux process. Je souhaite faire circuler des messages entre les deux. On m a demande de faire cela grace à un
[C] fread -> segmentation fault [ par bonobo78 ]
j'arrive pas a faire un fread :(void lecture_fichier( char path ) { FILE * File; char *message; File = fopen(path,"r"); message = (char*)mall
[C] Transfert de fichier par sockets [ par bonobo78 ]
salut ! j'ai un petit pb pour transmettre un fichier via des sockets.En fait, je decoupe le fichier en petit bout de 1024 octets et je transmets chaqu
La hierarchie pere et fils [:(] !!!!!!!!!!!! HELP!!!!!!!!!!! [ par laetitia334 ]
bonjour a tous! j'ai un probleme avec un programme! car je ne comprend pas les termes utilisés:Main (){int pid;printf("je suis le processus initial \n
fork: communication entre pere et fils [ par nezdeboeuf62 ]
Pour faire un chat, j'ai un programme qui contient une map (librairie STL, template).Bien sur cette map evolue regulierement.Le probleme c'est que apr
Polymorphisme et surcharge d'opérateur [ par blh_ind ]
Bonjour à tous. Probleme de polymorphisme, je vais pété un plomb Question : comment obtenir = Fils à l'étape 4 5 7 8 sans caster. Execution -
Thread et variable globale [ par valoue ]
Bonjour,Je developpe une application en C++.La classe que je developpe comporte une méthode "recevoir (char *trame). Dans cette méthode, je fais appel
Problème avec GetMessage d'un processus parent [ par RV2931 ]
Bonjour, j'ai un problème de communication, mais je suis informaticien, donc tout s'explique :), nan plus sérieusementDans le processus père, j'utilis
Variable global et processus [ par obasileus ]
Salut j'ai un programme comportant 4 processus fils qui lancent chacun 4 threads qui gèrent 2 problemes producteur/consom. Le processus pere à besoin
tuer createProcess api c [ par tanaka13 ]
bonjour à tous, voila mon probleme je debute avec les api en c et je suis largué. Je viens juste de renvoyer des parametres d'une fenetre console pe
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : CXIMAGERE : CXIMAGE par rt15
Cliquez pour lire la suite par rt15
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|