Bonjour,
J'ai besoin de faire un segment de mémoire partagé dans un programme en C sous Linux.
Je pense que je l'attache mal parce que ça compile mais quand je l'utilise toutes les données sont à 0.
Variables globales :
nat est une structure, initialisé correctement dans le main.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2int shmid; nat * tab_nat;
tab_nat est un tableau de ces structures également bien initialisé.
Voici la déclaration du shm dans le main :
Et l'utilisation dans une fonction (qui devra être appellé par un processus) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 if ( (shmid = shmget(CLE_IPC, sizeof(tab_nat), 0666 | IPC_CREAT)) < 0 ) { perror("shmget"); return EXIT_FAILURE; }
Le premier printf affiche 0 alors que le se second affiche bien la bonne valeur... La lecture via le segment de mémoire partagée ne semble donc pas marcher.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 nat * ptr; ptr = shmat(shmid, NULL, 0); printf("%x\n",ptr[0].adr_pub); printf("%x\n",tab_nat[0].adr_pub);
Quelqu'un aurait il une idée d'où peut provenir mon erreur ?
Merci d'avance,
Partager