Variables globales et processus pere-fils

Résolu/Fermé
Sara426 Messages postés 678 Date d'inscription mardi 6 octobre 2009 Statut Membre Dernière intervention 16 décembre 2015 - 11 déc. 2012 à 10:22
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 11 déc. 2012 à 14:06
Bonjour,

J'ai un petit problème que je traine depuis plus d'une heure alors je vous demande un coup de main.

J'ai deux fichiers : pere.c et fils.c
Dans le pere, il y a un fork() qui lance ensuite fils.c

Je voudrais faire une variable globale entre ses deux fichiers.
Pour ça je viens de créer un fichier commun.h avec une variable : extern int GLOB;

Dans les deux fichiers j'ai ajouter un #include "commun.h"
Cependant ni le pere ni le fils n'ont acces à cette variable.

SVP un peu d'aide serait vraiment la bienvenue.

Cordialement,
Sara.

1 réponse

[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 11/12/2012 à 14:08
Salut Sara426,

1.

"extern" permet d'étendre la visibilité de la variable, mais n'alloue pas la variable elle-même, sauf si tu l'initialise dans la foulée en faisant extern int GLOB = 0;, par exemple.

Ou ceci :

extern int GLOB;

et ailleurs :

int GLOB;


Cela devrait résoudre le problème d'accessibilité individuellement.

2.

Cependant, ce que tu veux faire n'a pas trop de sens.

Si pere.c et fils.c sont deux programmes C indépendants, le fait qu'ils partagent un fichier .h ne va pas faire qu'ils vont partager les mêmes données qui peuvent y être définies. Ce seront deux programmes indépendants, avec leur propre espace de mémoire.

S'agissant de fork(), je l'utilise assez peu, mais ma compréhension est que fork (qui est une fonction qui ne prend pas de paramètres, son prototype étant pid_t fork(void); cf. https://linux.die.net/man/2/fork ... tu ne peux donc pas lui passer le nom d'un autre processus) réalise une copie du processus dans lequel elle est lancée. Les variables sont dupliquées, et le fils vit sa vie. Les variables ne sont pas partagées, mais dupliquées.

En résumé, je ne pense pas que ce que tu souhaites faire soit faisable avec fork().

3.

Je pense plutôt que tu veux utiliser les threads (pour le traitement parallèle d'un même programme) ou, si ce sont deux programmes distincts, qui doivent accéder aux données de l'un et de l'autre utiliser d'autres procédés :

- memory map avec sys/mman.h sur les systèmes POSIX,
- sous Windows il y a CreateFileMapping : https://docs.microsoft.com/en-us/windows/win32/memory/creating-named-shared-memory?redirectedfrom=MSDN
- les sockets, pipes, etc.


Dal
1