Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
919 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C/UNIX] Tube + Mémoire partagée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/UNIX] Tube + Mémoire partagée

n°1273266
arnaudm57
Posté le 26-12-2005 à 11:57:55  profilanswer
 

Salut à tous et Joyeux Nöel !
 
J'ai un petit problème dans mon code, voici tout d'abord le code, j'expliquerai mon problème dans la suite :
 
Programme "principal":

Code :
  1. int main (int argc, char *argv[]) {
  2. void afficheur(*int)
  3. /*Déclaration de Variables */
  4. int shmid,tube[2];
  5. int *valeurs;
  6. /* Allocation des segments de mémoire partagée */
  7. shmid = shmget(IPC_PRIVATE, sizeof(int)*4, 0666);
  8. valeurs = (int *)shmat(shmid, NULL, 0);
  9. /* Création d'un tube */
  10. if (pipe (tube) == -1)
  11.     {
  12.       perror ("creation pipe impossible\n" );
  13.       exit(1);
  14.     }
  15. afficheur(tube);
  16. close(tube[0]);
  17. write(tube[1],valeurs,sizeof(int)*4);
  18. }


 
Fonction afficheur :

Code :
  1. void afficheur(int *tube)
  2. {
  3.   int *val;
  4.   if(! fork())
  5.     {
  6.   close(tube[1]);
  7.   read(tube[0],val,sizeof(int)*4);
  8.   printf("Valeur : %d",val[0]);
  9.     }
  10. }


 
Donc comme vous pouvez le constater j'ai crée quatre segments de mémoire partagée avec des valeurs qui seront changées par des processus mais là n'est pas le problème, tout cette partie fonctionne ... j'ai juste un problème avec mon tube pour afficher les valeurs si quelqu'un pouvait m'expliquer où j'ai fait l'erreur parce que mon programme ne m'affiche pas les valeurs attendues !
 
Merci beaucoup pour votre aide !


Message édité par arnaudm57 le 26-12-2005 à 20:08:09
mood
Publicité
Posté le 26-12-2005 à 11:57:55  profilanswer
 

n°1273309
blackgodde​ss
vive le troll !
Posté le 26-12-2005 à 15:13:23  profilanswer
 

val n'est pas alloué dans la fonction afficheur


---------------
-( BlackGoddess )-
n°1273338
arnaudm57
Posté le 26-12-2005 à 16:19:52  profilanswer
 

Après la lecture dans le tube, la valeur "val" est censé être affectée non ?

n°1273429
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-12-2005 à 19:42:29  profilanswer
 

arnaudm57 a écrit :

Après la lecture dans le tube, la valeur "val" est censé être affectée non ?


Par quel miracle ?

Code :
  1. {
  2.   int *val;
  3.   <...>  
  4.   read(tube[0],val,sizeof(int)*4);


'val' est un pointeur non initialisé. Tu passes une valeur indéterminée à une fonction, le comportement est indéterminé. Tu veux probablement

Code :
  1. int val[4];
  2.   <...>  
  3.   read(tube[0],val,sizeof val);


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C/UNIX] Tube + Mémoire partagée

 

Sujets relatifs
Modification des argv[i] et libération de la mémoirePurger les ports bindés en C sous unix
QT, taille mémoire des programmes ??Optimisation mémoire
Taille mémoire des variablessupprimer un fichier sous unix
liberation memoire[Résolu] Exécution sous unix
[Delphi] Impossible de liberer la mémoire d´un gifpb mise en memoire tampon d'une video
Plus de sujets relatifs à : [C/UNIX] Tube + Mémoire partagée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR