Variables globales et processus pere-fils
Résolu
Sara426
Messages postés
678
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
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.
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.
A voir également:
- Variables globales et processus pere-fils
- Numéro père noël whatsapp - Accueil - Messagerie instantanée
- Branchement prise jack 3 fils ✓ - Forum Audio
- Branchement prise téléphone adsl 4 fils ✓ - Forum câblage
- Prise téléphonique 4 fils ✓ - Forum Réseau
- Prise telephonique 4 fils et ligne adsl - Forum Réseau
1 réponse
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.
"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