cs_adri85
Messages postés18Date d'inscriptionjeudi 22 février 2007StatutMembreDernière intervention21 septembre 2009
-
3 mars 2007 à 00:13
cs_adri85
Messages postés18Date d'inscriptionjeudi 22 février 2007StatutMembreDernière intervention21 septembre 2009
-
5 mars 2007 à 17:40
Bonjour,
Je débute la programmation sous unix et je souhaite développer une petite application.
eLe programme père demande à l'utilisateur dans un dialogue (j'utilise printf et scanf) de poser des calculs simples (+ - * / %) avec 2 nombres entiers. J'utilise une file de message pour que le père envoie ces données au fils. Le fils est averti par un signal. Celui ci lit les données, fait le calcul, renvoie le résultat au père et lla prévient par un signal que le calcul est fait. Le père affiche ensuite le résultat et demande à l'utilisateur un nouveau calcul.
Voici mon code actuel incomplet
#include
<string.h>
#include
<stdlib.h>
#include
<stdio.h>
#include
<ctype.h>
#include
#include
<sys/types.h>
#include
<sys/ipc.h>
#include
<sys/msg.h>
#include
<sys/wait.h>#include
<sys/time.h>#define
CLEF_REQUETES 0x00012345
#define
LG_MAX 512
struct
msgform {
long mtype;
//type de message
char mtext[ LG_MAX ];
//corps du message}
msg;
int res;
int frequete;
void
ouvrier(){
//on r‚cupŠre les infos de la file de messageres = msgsnd(frequete, & msg, strlen(msg.mtext) + 1, 0);
if (res == -1) { perror(
"msgsnd"); exit(0); } ...
}
int
main(
int argc,
char *argv[]){
int fils;
char nombre1;
char nombre2;
char operation;
struct sigaction environ;
struct sigaction environ2;sigset_t masque;
sigset_t masque2;
sigemptyset(&masque);
sigemptyset(&masque2);
sigaddset(&masque,SIGUSR1);
sigaddset(&masque2,SIGUSR2);
environ.sa_handler = Afficher;
environ.sa_mask = masque;
environ2.sa_handler = ouvrier;
environ2.sa_mask = masque2;
sigaction(SIGUSR1,&environ,NULL);
//On cr‚e une file de messagefrequete = msgget(CLEF_REQUETES, 0700 | IPC_CREAT);
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 5 mars 2007 à 15:48
Salut,
Je me suis fais avoir comme toi après un copier-coller depuis gedit.
Par contre nedit ne m'a jamais poser de problème à ce niveau. Un jour,
faudrat qu'on m'explique pourquoi Windows utilise 2 caractères pour
sinifier la fin de ligne.
Concernant ton problème...
Dans ton while, tu lis les données puis tu crées un fils... Donc le
fils à directement accès au données (fork() fait une copie de tout
:pile, tât, code et registres) via msg.mtext.
Je crois que si tu veux faire ton algo (Compliqué pour rien), il faut
que tu crée le fils avant la lecture des données. Tu peux ensuite
utiliser un pipe pour échanger les données entre tes deux processus.
Un source qui devrait t'aider.