Rendre une zone memoire accessible a un autre processus
Bonjour tout le monde.
Tout d'abord j'espere que vous allez tous bien. Je sais qu'il fait froid et que vous vous battez avec vos SegFaults, mais courage ! La vie est belle.
Ensuite, ze probleme :
J'ai deux processus.
Le premier alloue une zone memoire avec mon ami malloc() et la remplit.
Le deuxieme doit la lire.
Le moyen le plus rapide pour le deuxieme de le lire serait qu'il ait acces a cette zone memoire. Comme ca je lui passe une adresse memoire et roulez jeunesse.
Est-ce possible ? Ou est ce que mes propos frisent l'heresie et qu'on va me bruler sur un bucher ?
Re: Rendre une zone memoire accessible a un autre processus
Citation:
Envoyé par Jack_serious
J'ai deux processus.
Le premier alloue une zone memoire avec mon ami malloc() et la remplit.
Le deuxieme doit la lire.
Le moyen le plus rapide pour le deuxieme de le lire serait qu'il ait acces a cette zone memoire. Comme ca je lui passe une adresse memoire et roulez jeunesse.
Il ne faut pas utiliser malloc() mais les fonctions shm_xxx (Shared Memory) qui sont faites pour ça. Tu auras aussi besoin des sémaphores pour synchroniser les accès et éviter les abérrations... Tout celà est bien compliqué...
Citation:
Est-ce possible ? Ou est ce que mes propos frisent l'heresie et qu'on va me bruler sur un bucher ?
Ceci-dit, je considère l'utilisation de la mémoire partagée dans une application multitâche (ou multi processus) comme une hérésie. Il est beaucoup plus simple d'utiliser un pipe nommé ou un socket unix pour échanger des données (architecture client / serveur)
Re: Rendre une zone memoire accessible a un autre processus
Citation:
Envoyé par Emmanuel Delahaye
Ceci-dit, je considère l'utilisation de la mémoire partagée dans une application multitâche (ou multi processus) comme une hérésie. Il est beaucoup plus simple d'utiliser un pipe nommé ou un socket unix pour échanger des données (architecture client / serveur)
C'est evident. Cet exercice est plus une sorte de defi...
L'objectif de base etait d'arriver a transmettre des donnees entre deux processus (un client et un serveur) en utilisant seulement les signaux.
Ca c'est avere tres interessant, etant donne les problemes d'ecrasement que l'on rencontre quand on en envoie trop d'un coup, vu que ce n'est pas du tout destine a ce genre d'utilisation. Amusant comme exercice, On s'est retrouve oblige de recreer un mini-protocole de transfert.
J'etais arrive a un resultat tres correct en envoyant le pid du premier processus au deuxieme et en faisant en suite un ping-pong avec des sigprocmask() et des sigsuspend().
Le coup de partager la memoire c'etait une idee pour obtenir une vitesse optimale : je transmet juste l'adresse.
Voila le pourquoi de cette question... Avec des pipes ca aurait ete fait vite...
Mais le but est d'arriver a faire acceder l'autre processus a des donnees en lui envoyant le moins d'informations possible...