Utilisation Mémoire Vive

jack -  
dubcek Messages postés 19026 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai un problème en C, je vous explique rapidement.
J'ai un projet sous Linux qui m'impose de travailler en mémoire vive et donc de créer une mémoire partagée entre plusieurs processus afin de pouvoir communiquer les informations entre ces derniers car l'appel de la pile d'éxécution d'un processus dans un autre est interdit.
Donc je voudrai, si possible, savoir si vous pouviez me donner quelques idées pour avoir à rentrer par exemple une chaine de caractères dans un processus fils et qui pourrait être utilisée dans le processus père ?

Merci d'avance pour vos conseils.

2 réponses

dubcek Messages postés 19026 Date d'inscription   Statut Contributeur Dernière intervention   5 640
 
hello
utiliser les pipes ou la mémoire :

NAME
pipe - create pipe
DESCRIPTION
pipe creates a pair of file descriptors, pointing to a pipe inode, and places them in the array pointed to by filedes. filedes[0] is for reading, filedes[1] is for writing.

NAME
shm_open, shm_unlink - Create/open or unlink POSIX shared memory objects
DESCRIPTION
shm_open creates and opens a new, or opens an existing, POSIX shared memory object. A POSIX shared memory object is in effect a handle which can be used by unrelated processes to mmap(2) the same region of shared memory. The shm_unlink function performs the converse operation, removing an object previously created by shm_open.
0
jack
 
Bonjour dubcek,
le but de mon programme étant de créer un forum sur le terminal linux sur lequel on peut rentrer par réseau entre PC, je créé un processus pour chaque utilisateur, les utilisateurs pourront s'enregistrer, écrire des messages ...etc

Le projet est en fait limité à l'utilisation de la mémoire vide (utilisation de malloc non ?) et comme je ne suis vraiment pas calé en C mais plus en JAVA, je voulais savoir comment je pouvais allouer une chaine de caractère en mémoire vive à partir d'un processus sur une mémoire partagée afin que l'autre processus puisse récupérer les info :
Code du type :

int main()
{
pid_t serveur;

[...] /* Code enregistrement des utilisateurs ..etc */

int i = 0;


for (i=0;i<nb;i++) /* est le nombre de personnes enregistrées sur le serveur */
{
char* p;
p =(char*)malloc(200*sizeof(char)); /* On limite la taille du message à 200 caractères */
serveur = fork();
switch(serveur)
{
case 0: /*Utilisateur simple*/

printf("%s : Ecrivez votre message : ", user[i]); /* user est l'utilisateur dont il est question */
scanf("%s",message);

break;
default: /* Administrateur : Reception des messages*/

/* Ici je voudrais afficher le message qui a été écrit juste au dessus mais je ne sais pas comment allouer dans le processus fils (case 0) dans le malloc car c'est une chaine de caractères :/ */

waitpid(getppid(),&message,0);
printf("%s",message);

break;
}


}

return 0;
}
0
jack
 
Désolé pour la forme du code sur le site :$
0
dubcek Messages postés 19026 Date d'inscription   Statut Contributeur Dernière intervention   5 640
 
malloc alloue de la mémoire utilisable uniquement par cette tâche. pour que d'autres tâches aient accès à cette mémoire, il faut la partager
shmat(2) - shared memory operations
shmctl(2) - shared memory control operations
shmdt(2) - shared memory operations
shmget(2) - get shared memory segment identifier
shmids(2) - discover all shared memory identifiers
shmop(2) - shared memory operations
sigaction(2) - detailed signal managem
0