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:
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);
}
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...
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?