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 :

nanosleep et timespec_t : storage size isn't known


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 31
    Points : 25
    Points
    25
    Par défaut nanosleep et timespec_t : storage size isn't known
    Bonjour,

    Voilà, j'ai une erreur qui me casse la tête.
    Voici le simple bout de code que j'utilise :
    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
    #include <pthread.h>
    #include <stdlib.h>
    #include <stdio.h>
     
    void* threadLambda(void* param)
    {
        struct timespec_t t;
     
        t.tv_sec = 5; t.tv_nsec = 0;
        nanosleep(&t, NULL);
     
        exit(0);
    }
     
    int main()
    {
        pthread_t thread;
     
        if (pthread_create(&thread, NULL, threadLambda, NULL) != 0)
    	return 1;
     
        while(1);
     
        return 0;
    }
    Pour compiler : cc -o test test.c -lpthread
    A la compilation, il me sort :
    test.c:7:error storage size of 't' isn't known
    On dirait qu'il ne connait pas la définition de timespec. Or celle-ci est définie dans pthread.t, non ?
    Je travaille avec cc v3.4.3 sur Solaris 10.
    Si il vous faut d'autres infos, n'hésitez pas à demander.
    Je pense que le problème doit venir de la version de mes librairies(trop vieilles).. Ou alors une option dans la compilation que j'aurais oublié..

    Pourriez-vous m'aiguiller ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    En cherchant un peu j'ai l'impression que ta structure timespec_t fait plutôt partie de time.h. Je me trompe peut être...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Même en incluant time.h, ça ne marche pas.
    De plus, pthread.h contient la définition de timespec via time.h.

    Bon sang, j'ai essayé pas moins de 26000 solutions trouvées sur le net, et pas moyen..

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Je crois que tu confond timespec et timespec_t.

    Cf man nanosleep.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    J'avais déjà essayé de remplacer timespec par timespec_t. Rien n'y change.
    Pire encore, quand j'utilise timespec, il ne reconnait pas le type même en incluant time.h.


  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Effectivement je pense que Neckara à raison. De ce que je trouve sur le Net est que timespec_t est un #typedef de struct timespec.

  7. #7
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Es-tu sûr que Solaris respecte la norme POSIX 2001 ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Es-tu sûr que Solaris respecte la norme POSIX 2001 ?
    Comment le vérifier ?


    J'ai pris pleins d'example sur le net, aucun ne compile. Toujours la même erreur. C'est pour ça que je me disais que le prob venait de la vieillesse de mes libs.

  9. #9
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Un lien vers la définition du typedef.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    Bon, après ton conseil Neckara, j'ai vérifié quel version POSIX solaris prenait en charge.
    Apparemment, mon solaris ne prend en charge que jusque POSIX.1-1996(1.c).

    Normalement nanosleep doit être conforme à _POSIX_C_SOURCE >= 199309L.
    Donc ma version suffit, non ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2013
    Messages : 31
    Points : 25
    Points
    25
    Par défaut
    J'ai trouvé une solution à mon problème.
    A la compilation, je rajoute la librt. Et j'utilise donc directement struct timespec au lieu de struct timespec_t.

    Le pourquoi, j'en sais rien du tout. Et si quelqu'un sait, franchement, je suis ouvert à n'importe quel lien(ou même explication) pour comprendre.

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    petite question :

    pourquoi utiliser nanosleep et non pas alarm couplé avec sleep ??
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  13. #13
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    petite question :

    pourquoi utiliser nanosleep et non pas alarm couplé avec sleep ??
    ???

    Alarm envoit un signal au bout de X secondes, je suppose que tu veux l'utiliser pour réveiller le thread "endormit avec sleep".
    Déjà, je ne voit pas l'intérêt d'utiliser alarm ici, autant utiliser sleep directement.

    Ensuite, sleep n'a pas la précision de nanosleep et ne peut s'endormir pour moins d'une seconde.

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Alarm envoit un signal au bout de X secondes, je suppose que tu veux l'utiliser pour réveiller le thread "endormit avec sleep".
    Déjà, je ne voit pas l'intérêt d'utiliser alarm ici, autant utiliser sleep directement.

    Ensuite, sleep n'a pas la précision de nanosleep et ne peut s'endormir pour moins d'une seconde.
    Merci d'arrêter de me prendre pour un c.n..

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    struct itimerval   rttimer;
    struct itimerval   old_rttimer;
     
    signal ( SIGALRM, (void (*)())Timer_Expiration );
     
    rttimer.it_value.tv_sec     = i ;
    rttimer.it_value.tv_usec    = j ;
    setitimer (ITIMER_REAL, &rttimer, &old_rttimer);

    regarde ce que veux dire l'élément "tv_usec"....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  15. #15
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    @souviron34
    ...
    Le code que tu nous montre n'utilise pas alarm, il utilise signal et setitimer.

  16. #16
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Ni sleep...

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Ni sleep...
    ben j'vais pas mettre tout le programme, non plus
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 28/09/2012, 17h33
  2. _S_IFREG isn't known - version de compilateur ?
    Par Kaamui dans le forum Débuter
    Réponses: 10
    Dernier message: 16/02/2012, 15h56
  3. [font.size] Comment descendre en dessous de 8 ?
    Par Dry dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/04/2004, 16h01
  4. pb de select avec size avec choix multiple
    Par La_picolle dans le forum ASP
    Réponses: 10
    Dernier message: 28/08/2003, 15h21
  5. Erreur "size array"
    Par boobob dans le forum C
    Réponses: 3
    Dernier message: 06/08/2003, 10h18

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