Bonjour, j'ai un problème avec un code aujourd'hui qui agit d'une façon que je ne prévoyais pas du tout.
Aperçu du code:
Mon problème vient du fait que l'adresse stockée par com ne pointe pas vers la même valeur dans les deux programmes, bien que les adresses de com dans les deux programmes soient les mêmes. Je ne comprend pas: ligne 20 j'initialise la valeur pointée par com à zéro, ligne 30 je continue tant que cette valeur reste inchangée (c'est à dire tout le temps) alors que ligne 37, j'ai bien modifié la valeur pointée par com...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> [...] int main(int ac, char **av, char **env) { int i; pid_t opid; int *com; com = malloc(sizeof(int)); if (com == NULL) { printf("Allocation failure\n"); _exit(1); } *com = 0; opid = getpid(); i = 0; while (env[i]) printf("%s\n", env[i++]); printf("Will now divide into two processes\n"); fork(); if(getpid() == opid) { printf("I am the father %d %d, and I wait for my son to give signal\n", getpid(), getppid()); while (*com == 0); printf("Son is alive, resume\n"); wait(); printf("Son's status is down, continue with normal father execution\n"); } else { *com = 666; subroutine(env); } free(com); return (0); }
En gros si je fais un printf("%d %p\n", *com, com) dans le père j'aurais "0 0x33bec3" et dans le fils j'aurais: "666 0x33bec3". Si les deux valeurs sont stockées au même endroit, pourquoi ne sont elles pas équivalentes? Comment assurer un flux de données entre les deux programmes?
Partager