IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Gestion de mémoire partagée en Sémaphore


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Gestion de mémoire partagée en Sémaphore
    Bonjour,

    Je dois gérer une mémoire partagée de facon que si je lance 2 fois simultanémentle programme l'affichage reste correcte en utilisant le sémaphore j'ai bien compris le principe mais je ne sais pas comment implémenter ses fonction voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <sys/types.h>
    #include <sys/sem.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <strings.h>
     
    #define TAILLE 1024
     
    struct sembuf up = {0,1,0};
    struct sembuf down = {0,-1,0};
     
    void ecrire_tableau(int *compteur, char *tableau) {
      char message[64], *msg=message;
      int my_sem = semget(IPC_PRIVATE,1,0600|IPC_CREAT);
      snprintf(message, 64, "Je suis le processus %d!\n", getpid());
     
      semop(my_sem,&down,1);
     
      while ((*compteur<TAILLE)&&(*msg)) {
        semop(my_sem,&up,1);
        tableau[*compteur] = *msg;
        msg++;
        usleep(100000);
        semop(my_sem,&down,1);
        (*compteur)++;
      }
      semctl(my_sem,0,IPC_RMID);
    }
     
    int main() {
      int id, *compteur;
      char *tableau;
     
      id = shmget((key_t)1234,TAILLE+sizeof(int),0600|IPC_CREAT);
     
      if (id<0) {perror("Error shmget"); exit(1); }
     
      compteur = (int*) shmat(id,0,0);
      if (compteur==NULL) { perror("Error shmat"); exit(1); }
     
      tableau = (char *)(compteur + 1);
     
      ecrire_tableau(compteur, tableau);
     
      printf("%s\n", tableau);
     
     
      if (shmdt(compteur)<0) { perror("Error shmdt"); exit(1);}
     
     
     
      return 0;
    }
    Merci pour votre réponse =)

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    La fonction semget avec IPC_PRIVATE va créer un nouveau sémaphore à chaque fois. Donc chaque exécution de ton programme va posséder son propre sémaphore.
    Tu dois d'abord créer un sémaphore et stocker son ID quelque part (un fichier par exemple) pour que chaque exécution de ton programme utilise un unique sémaphore.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,
    Merci pour votre réponse j'ai pu resoudre le programme je devrai supprimer le semaphore dans un autre programme sinon il le crée a chaque fois et je perd l'ancien

Discussions similaires

  1. Sémaphore et mémoire partagé
    Par flov91 dans le forum Débuter
    Réponses: 1
    Dernier message: 23/04/2009, 17h13
  2. Création sémaphore et mémoire partagée python
    Par geek44 dans le forum Général Python
    Réponses: 2
    Dernier message: 10/05/2008, 03h00
  3. Mini Chat - sémaphores et mémoire partagée
    Par highman dans le forum Réseau
    Réponses: 4
    Dernier message: 02/04/2007, 21h54
  4. Sémaphores et Mémoires partagées
    Par Sensib dans le forum C++
    Réponses: 3
    Dernier message: 19/03/2006, 18h14
  5. Réponses: 17
    Dernier message: 02/02/2006, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo