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

Eclipse C & C++ Discussion :

cygwin et CLES segment de m�moire


Sujet :

Eclipse C & C++

  1. #1
    Membre tr�s actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2015
    Messages
    238
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Par d�faut cygwin et CLES segment de m�moire
    Bonjour

    Mon probl�me :
    Je ne sais pas si cygwin g�re bien les cl�s de segment m�moire ?
    Ou alors dois je mettre tout mon espace de travail d'eclipse dans /home de cygwin pour qu'il puisse g�rer les cl�s ?

    Je pr�cise que le code fonctionne sous linux avec console ou sous eclipse en changeant �videmment les chemins des fichiers lecteur/redacteur!

    Voici mon code en entier puis l� o� �a bloque une fois ex�cut� sous eclipse :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include <sys/sem.h>
     
    #define CLE 253
    #define CLES 300
     
    int main()
    {
    int shmid, semid, i;
    char *mem=0;
    int status, rc;
    struct shmid_ds shmid_struct;
     
    pid_t lecteur, redacteur;
     
    shmid=shmget((key_t)CLE,1000,0750 |IPC_CREAT | IPC_EXCL);
     
    mem=shmat(shmid,mem,0);
    if(mem == (char*) -1) {
    printf("\nShmat failed, erreur alloc memoire \n");
    return(0);
    }
     
    *mem= 0;
    *(mem+ 4) = 0;
     
    semid= semget(CLES, 2, IPC_CREAT|IPC_EXCL|0600);
     
    semctl(semid, 0, SETVAL, 1);
    semctl(semid, 1, SETVAL, 1);
     
    i = 0;
     for (i=0;i <3;i++) {
          lecteur= fork();
          if (lecteur== 0) {
             execl("C:\workspace\workspace_c\lecteur\Debug\lecteur.exe", "C:\workspace\workspace_c\lecteur\Debug\lecteur.exe", NULL);
          }
          else{
               redacteur= fork();
               if (redacteur== 0)
                  execl("C:\workspace\workspace_c\redacteur\Debug\redacteur.exe", "C:\workspace\workspace_c\redacteur\Debug\redacteur.exe", NULL);
          }
      }
    wait(&status);
     
        rc = shmctl(shmid, IPC_RMID, &shmid_struct);
        if (rc==-1)
          {
            printf("main: shmctl() failed\n");
            return -1;
          }
     
        rc = shmdt(mem);
        if (rc==-1)
          {
            printf("main: shmdt() failed\n");
            return -1;
          }
     
          rc = semctl( semid, 2, IPC_RMID );
        if (rc==-1)
          {
            printf("main: semctl() remove id failed\n");
            return -1;
          }
     
    return 0;
     }
    Je ne passe pas cette partie du code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    shmid=shmget((key_t)CLE,1000,0750 |IPC_CREAT | IPC_EXCL);
     
    mem=shmat(shmid,mem,0);
    if(mem == (char*) -1) {
    printf("\nShmat failed, erreur alloc memoire \n");
    return(0);
    }
    Merci � vous d'avance de vos remarques et conseils avis�es

  2. #2
    Membre tr�s actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2015
    Messages
    238
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Par d�faut
    bref

    comment utiliser avec cygwin pour les segments de m�moire, m�moires partag�s,... quand on code sous windows/eclipse ?

    y'a peut-�tre un ligne de code � entrer dans le terminal cygwin ? J'ai d'ailleurs mis tout mon espace de travail C dans le /home du r�pertoire de cygwin car je pensais que �a pouvait venir de l� mais sans succ�s !

    j'ai cherch� sur google mais je n'ai pas encore trouv� d'explication claire.
    Apparemment �a n'a pas l'air simple sous cygwin pour la cr�ation de processus, signaux, socket,... C'est peut-�tre �a qui pose probl�me ?
    http://pipeline.lbl.gov/code/3rd_par...in-ug-net.html

    Comme j'ai qu'une machine virtuelle linux fedora pour utiliser linux pour l'instant, je vais retourner dessus

  3. #3
    Membre tr�s actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2015
    Messages
    238
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 238
    Par d�faut
    il me manquait � lancer dans la console de cygwin
    /usr/sbin/cygserver.exe &

    et

    En C �chapper le \ pour qu'il soit interpr�t� correctement car il sert lui m�me de caract�re d'�chappement: donc tu dois mettre \\.

    sinon

    le code tourne mais cygwin ou eclipse et windows (ce qui est plus logique puisque c'est l'os qui va g�rer les processus) me g�n�re des fichiers du type :
    lecteur.exe.stackdump
    redacteur.exe.stackdump
    qui me donne les pid des fork lecteur et redacteur, une info que je n'ai pas sous linux directement dans eclipse !

    De plus j'avais en plus oubli� que sous linux les chemins sont marqu�s par des '/' et non des '\' comme sous win

    Par contre pour une fois : windows est plus fort que linux car linux g�re les pr�emptions il y a donc un entrelacement des processus dans la console.
    Et donc des affichages dans la console que se partagent les programmes redacteur et lecteur qui ne correspondent pas parfois � la r�alit� du code.
    Car redacteur doit �crire et lecteur si y'a rien dans la zone m�moire il n'affiche rien or l� si le redacteur n'a pas fini d'�crire linux pr�empte le lecteur et affiche son dernier contenu !!!

    Je marque r�solu mais si vous avez des commentaires sur cette histoire d'entrelacement je regarderais.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [SHM] shmget cr�e uniquement des segments de m�moire partag�e priv�e
    Par prgasp77 dans le forum Administration syst�me
    R�ponses: 1
    Dernier message: 23/09/2009, 08h20
  2. R�ponses: 4
    Dernier message: 14/05/2009, 20h22
  3. Remplir un segment de m�moire
    Par redanovich dans le forum POSIX
    R�ponses: 18
    Dernier message: 22/06/2008, 21h14
  4. s�maphores et segments de m�moire
    Par djed2 dans le forum Linux
    R�ponses: 4
    Dernier message: 21/03/2007, 10h44
  5. Allouer un segment de m�moire avec "GNU GCC Compiler&qu
    Par damien99 dans le forum Autres �diteurs
    R�ponses: 2
    Dernier message: 22/06/2006, 23h18

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