partage de la memoire entre processus

partage de la memoire entre processus - C++ - Programmation

Marsh Posté le 22-01-2003 à 10:50:07    

voila j suis en train de programmer un truc sous linux, et j'ai besoin de faire plusieurs processus
je sais que lorsqu'on fait un fork, toutes les variables sont dupliquées de sorte que chacun des 2 processus agissent sur des variables differentes
 
alors j'me suis dit : pas de probleme, j'vais utiliser des pointeurs, comme ca chaque processus aura l'adresse de l'objet que je veux modifier
 
mais ca a pas l'air de marcher
 
alors ma question est :
est-ce normal que meme avec des pointeurs on ne puissent acceder a la meme donnée avec 2 processus differents, et dans quel cas, comment ce fait-ce ?:)
 
merci bien pour vos futures suggestions:)

Reply

Marsh Posté le 22-01-2003 à 10:50:07   

Reply

Marsh Posté le 22-01-2003 à 11:01:30    

oui normal (même les pointeurs sont "dupliquées" )
pthread ou pipe

Reply

Marsh Posté le 22-01-2003 à 11:04:12    

meme les pointeurs sont dupliques...
cad que pour chaque pointeur il duplique l'objet pointé afin que les adresses ne soient pas les meme ?
quel vicieux alors !
 
bon ben j'vais essayer avec un pipe
 
ca marche comment au juste les pipe ?
faut toujours un tableau de 2 entiers ou on peut faire autrement ?

Reply

Marsh Posté le 22-01-2003 à 11:21:14    

sous Linux, utilise la fonction pipe ... en fonction de la communication que tu veux pere ferme l'ecriture et le fils, la lecture ...

Reply

Marsh Posté le 22-01-2003 à 12:07:39    

oki merci
 
(ncurses sux)

Reply

Marsh Posté le 22-01-2003 à 13:12:02    

argh, ca marche pas, et j capte pas pkoi
voila ce ke je fais :
dans le main:

Code :
  1. if(pipe(p) == -1)
  2.     printf("erreur a la creation du pipe\n" );
  3.   if(!fork())
  4.     {  process_draw(); exit(0); }
  5.   if(!fork())
  6.     { process_upd(); exit(0); }
  7.   wait(NULL);
  8.   wait(NULL);

 
dans process_upd:

Code :
  1. close(p[0]);
  2.        write(p[1], obj, sizeof(S_objet *));
  3.        close(p[1]);

 
et dans process_draw:
 

Code :
  1. close(p[1]);
  2.     read(p[0], obj, sizeof(S_objet*));
  3.     close(p[0]);

 
 
mon obj est un pointeur sur une struct
j'ai testé les valeurs, elles sont bonnes au niveau de la fonction process_upd
 
par contre elles sont pas passées dans la fonction process_draw
 
et je sais pas ce que je fais de mal
 
please help

Reply

Marsh Posté le 22-01-2003 à 13:25:34    

bon j'ai mis &obj au lieu de obj, et c deja un peu mieux, je recupere bien la bonne adresse:)
 
par contre les chaps de la struct sont pas bons, mais ca c ptet un autre probleme

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed