communication entre processus dans quel cas
Bonsoir,
je m'essaye a la communication entre processus, pour ce faire jai crée un programme en C avec une fonction qui crée un processus pour une fonction passé en paramétre, a l'aide de ce code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
int nouveau_processus( void (*nouv_prog)()){
pid_t processus;
processus = fork();
if (processus == -1){
printf("erreur dans la création du processus\n");
return 0;
}
else if (processus == 0){
printf("je suis dans le processus fils et j'execute la fonction en paramétre\n");
nouv_prog();
return getpid();
}
} |
j'ai une fonction change état LED qui change l'état d'un variable, et une fonction [I]voir etat LED[I] qui me renvoi l'état de la variable, voici le code :
Code:
1 2 3 4 5 6 7 8 9 10
|
int LED = 0;
void change_etat_LED(int b){
LED = b;
}
int voir_etat_LED(){
return LED;
} |
ainsi pour crée un nouveau processus avec ces fonctions je fait ceci :
Code:
1 2 3 4 5 6 7
|
void nouveau_programme1(){
change_etat_LED(3);
}
//je crée le processus avec mon nouveau_programme1
nouveau_processus(nouveau_programme1); |
maintenant si je souhaite voir le changemement d'état de ma variable je crée un nouveau processus de cette facon :
Code:
1 2 3 4 5 6
| void nouveau_programme2(){
voir_etat_LED()
}
//je crée le processus avec mon nouveau_programme2
nouveau_processus(nouveau_programme2); |
Le problème c'est que tout ça fonctionne, la variable LED et bien changer pas 'nouveau_programme1' et moi ce que je voudrais c'est faire communiquer l'état de la variable LED par un système de communication inter processus IPC (du genre MSQ ou autres), est ce que j'ai loupé quelques chose ?
Processus qui modifie ma variable !
NdlM : discussion fusionnée avec la précédente.
Bonjour j'ai fait un petit programme pour m’entraîner au fork()
En fait c'est une fonction 'nouveau_programme' qui prend en paramètre une fonction (qui change l'état d'une variable) et crée un processus pour la fonction passé en paramètre, la voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| //crée un processus pour un nouveau programme
int v2_nouveau_programme(void (*nouv_prog)()){
pid_t processus;
processus = fork();
if (processus == -1) { // erreur
printf("erreur dans la creation du processus");
return 0;
}
else if (processus == 0) { //processus fils
nbr_simultane++;
printf("processus fils de pid %d et de pére%d\n",getpid(), getppid());
nouv_prog();
return 4;
}
} |
et j'ai une fonction par exemple, 'rotate_bras_gauche'
Code:
1 2 3 4
|
void rotate_bras_gauche(int a){
bras_gauche = a;
} |
Donc pour exécuter la fonction ci dessus dans un nouveau processus, je fais :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
int bras_gauche =0;
void mon_programme_1()
{
rotate_bras_gauche(90);
}
//crée un processus pour la rotation du bras
int main(){
v2_nouveau_programme(mon_programme_1);
sleep(5);
printf("valeur de bras_gauche :%d\n", bras_gauche);
return 0;
} |
Mon soucis est que après l’exécution de 'v2_nouveau_programme(mon_programme_1)' ma variable bras_gauche à bien changé de valeur ! elle est a 90, alors que je fait la modification dans un nouveau processus !
N'aurais je pas du utilise un système de tubes nommées ou autre , comment ce fait il que ça fonctionne ? (a cause du copy on write ???)
j'ai crée un post précédent sur le même sujet mais celui ci s'accompagne d'un exemple :?
merci