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
[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
A voir également:
- Variables globales et processus pere-fils
- Pere noel whatsapp - Accueil - Messagerie instantanée
- Branchement prise jack 3 fils ✓ - Forum Audio
- Processus hôte windows (rundll32) ✓ - Forum Windows
- A quoi servent les 8 fils rj45 - Forum câblage
- Branchement prise téléphone adsl 4 fils ✓ - Forum câblage
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
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.
"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