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

Administration système Discussion :

Programmation des sémaphores


Sujet :

Administration système

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 22
    Points
    22
    Par défaut Programmation des sémaphores
    Bonjour
    J'ai écrit un programme sur les sémaphores, après la compilation j'ai eu l'erreur suivante : error: ‘SET_VAL’ undeclared (first use in this function)
    Voici le code du programme :
    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
     
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/sem.h>
    #define ID_PROJET 'P'
     
    int main(int argc, char **argv)
    {
        key_t clef;
        int semid;
        clef = ftok(argv[0], ID_PROJET);
        semid = semget(clef, 1, IPC_CREAT | IPC_EXCL | 0666);
        semctl(semid, 0, SET_VAL, 1);
        return 0;
    }
    Si quelqu'un peut m'aider pour corriger cette erreur ?
    Merci d'avance.

  2. #2
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    d'apres le man de semctl

    http://www.linux-kheops.com/doc/man/.../semctl.2.html

    c'est SETVAL et pas SET_VAL
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Merci jabbounet pour votre aide

  4. #4
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    quelques cours sur les sémaphores et ipc, il y'a a peu pres ce qu'il faut savoir sur le sujet

    http://drocourt.info/cours/Unix/C-Pr...rog_sys7.xhtml
    http://rangiroa.essi.fr/cours/system...y-ipc-unix.pdf
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Bonjour
    Merci beaucoup jabbounet pour les documentations que vous m'avez donné.
    Seulement j'ai un petit problème, j'ai ajouté à mon code l'initialisation du sémaphore que j'ai crée pour le rendre un mutex, j'ai utilisé pour cela la structure sembuf et la fonction semop, après la compilation, j'ai eu la meme erreur : error: ‘sembuf’ undeclared (first use in this function)
    Voici le segment de code que j'ai ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/sem.h>
        sembuf op;
        op.sem_num = O; 
        op.sem_op = -1; 
        op.sem_flg = 0; 
        semop(semid, &op, 1);
    Pourriez m'aider pour corriger cette erreur ?
    Merci d'avance.

  6. #6
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    mauvais message
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  7. #7
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Normalement sembuf est définit sans <sys/sem.h> de la façon suivante:

    dans /usr/include/sys/sem.h j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct sembuf {
            ushort_t        sem_num;        /* semaphore # */
            short           sem_op;         /* semaphore operation */
            short           sem_flg;        /* operation flags */
    };
    Probable qu'il te manque une option de compilation indiquant ou trouver ce fichier dans l'include path

    peu etre en ajoutant -I/usr/include quand tu compile.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Je sais que la structure sembuf est définit dans <sys/sem.h>, j'ai consulté le fichier sem.h et j'ai trouvé la méme structure que j'ai utilisé dans le programme
    J'ai ajouté l'option à la commande pour indiquer où se trouve le fichier mais c'est la méme erreur qui s'affiche

  9. #9
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par pedatic Voir le message
    Je sais que la structure sembuf est définit dans <sys/sem.h>, j'ai consulté le fichier sem.h et j'ai trouvé la méme structure que j'ai utilisé dans le programme
    tu l'as redéfinis dans ton programme?

    J'ai ajouté l'option à la commande pour indiquer où se trouve le fichier mais c'est la méme erreur qui s'affiche
    peux tu montrer tes sources (le fichier complet) et comment tu les compile?
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Voici le code (le nom du fichier est semaphore.c)
    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
     
     
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/sem.h>
    #define ID_PROJET 'P'
     
    int main(int argc, char **argv)
    {
        key_t clef;
        int semid;
        sembuf op;
        clef = ftok(argv[0], ID_PROJET);
        semid = semget(clef, 1, IPC_CREAT | IPC_EXCL | 0666);
        semctl(semid, 0, SETVAL, 1);        
        op.sem_num = O; 
        op.sem_op = -1;
        op.sem_flg = 0; 
        semop(semid, &op, 1);
        return 0;
    }
    Pour le compiler j'ai utilisé la commande : gcc semaphore.c

  11. #11
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    que donne en supposant que sem.h soit dans /usr/include/sys

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     gcc -I/usr/include semaphore.c
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     gcc -I/usr/include/sys semaphore.c
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     gcc -I/usr/include -I/usr/include/sys semaphore.c
    faire attention de nettoyer les semaphore que tu crée aussi

    la commande ipcs -a devrais te donner la liste, et ipcrm devrais te permettre de les virer
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    J'ai essayé les 3 commandes mais çà n'a pas marché

  13. #13
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    .....
    struct sembuf op;
    ....
    ..... et
    op.sem_num = 0; (et pas O) ^^

    voila voilou sauf erreur.
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    Bonjour
    pour votre aide MarcG, vous m'avez le problème

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [+ou- débutant] utilisation des sémaphores
    Par Biosox dans le forum Windows
    Réponses: 4
    Dernier message: 26/05/2008, 12h23
  2. [DBA] Programmer des jobs
    Par pzou dans le forum Oracle
    Réponses: 14
    Dernier message: 26/01/2006, 16h43
  3. [VBA-E] Toggle button: programmation des actions
    Par micknic dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/10/2005, 19h28
  4. Programmation des ports // et/ou séries
    Par sami_c dans le forum Windows
    Réponses: 1
    Dernier message: 17/09/2005, 13h15
  5. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53

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