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

Linux Discussion :

[Débutant] Erreur à la compilation indéterminer


Sujet :

Linux

  1. #1
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Par défaut [Débutant] Erreur à la compilation indéterminer
    Bonjour,

    j'ai compiler ce code avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -o exotp2 exotp2.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
    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sched.h>
    #include<sys/wait.h>
    #include<errno.h>
     
    main()
    {
    int ret,pid;
    int politique,status,priorite;
    struct timespec quantum;
    struct sched_param param;
     
    ret=fork();
    if(ret==0)
      { /* Processus fils */
            pid=getpid();
            printf("je suis le fils ma priorité d'ordonnancement est : %d \n",getpriority(PRIO_PROCESS,pid));
     
    politique=sched_getscheduler(pid);
     
          if(politique==SCHED_RR)
             printf("je suis le fils ma prorité d'ordonnancement est SCHED_RR \n");
          if(politique==SCHED_FIFO)
             printf("je suis le fils, ma prorité d'ordonnancement est SCHED_FIFO \n");
          if(politique==SCHED_OTHER)
             printf("je suis le fils, ma prorité d'ordonnancement est SCHED_OTHER \n");
     
    param.sched_priority =10;
    setpriority(PRIO_PROCESS, pid, 10);
     
    if(sched_setscheduler(pid, SCHED_FIFO, &param) == -1)
      perror("problème scheduler");
    priorite = getpriority(PRIO_PROCESS, pid);
    printf("je suis le fils, ma priorité d'ordonnancement est: %d\n", priorite);
     
    politique = sched_getscheduleur(pid);
    if(politique == SCHED_RR)
    printf("je suis le fils, ma politique d'ordonnancement est: SCHED_RR \n");
    if(politique == SCHED_FIFO)
    printf("je suis le fils, ma politique d'ordonnancement est: SCHED_FIFO \n");
    if(politique == SCHED_OTHER)
    printf("je suis le fils, ma politique d'ordonnancement est: SCHED_OTHER \n"); 
    }
     
    else    /* Processus pére */
    {
    printf("Voici les priorités min et max de la politique SCHED_FIFO, %d, %d\n",
           sched_get_priority_min(SCHED_FIFO), sched_get_priority_max(SCHED_FIFO));
     
    printf("Voici les priorités min et max de la politique SCHED_RR, %d, %d\n",
           sched_get_priority_min(SCHED_RR), sched_get_priority_max(SCHED_RR));
     
    sched_rr_get_interval(getpid(), &quantum);
     
    printf("Voici les valeurs du quantum de la politique SCHED_RR, %d secondes, %d nanosecondes \n", 
           quantum.tv_sec, quantum.tv_nsec);
     
     wait(&status);
     }
     
    }
    voila le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    /tmp/ccqzDykS.o: In function `main':
    exotp2.c:(.text+0x110): undefined reference to `sched_getscheduleur'
    collect2: ld a retourné 1 code d'état d'exécution
    y a t-il quellqu'un qui peux m'aider à comprendre l'erreur.

    Merci d'avance.

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -o exotp2 exotp2.c -lrt

  3. #3
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Par défaut
    Bonjour

    j'ai compiler avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gcc -o exotp2 exotp2.c -lrt
    le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    exotp2.c: In function ‘main’:
    exotp2.c:59: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘__time_t’
    exotp2.c:59: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long int’
    /tmp/ccGCpxFh.o: In function `main':
    exotp2.c:(.text+0x110): undefined reference to `sched_getscheduleur'
    collect2: ld returned 1 exit status
    sa n'a rien changer même si je ne c'est pas ce que sa veux dir ?

    j'ai aussi tester avec: (en ajoutant le nom du réprtoire ou autre)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     gcc -o exotp2 exotp2.c -lrt TP
    resulta:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    gcc: TP: Aucun fichier ou dossier de ce type
    exotp2.c: In function ‘main’:
    exotp2.c:59: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘__time_t’
    exotp2.c:59: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long int’
    et en commpilant un autre sa marche trés bien:
    code: fork.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
    22
    23
    24
    25
     
    #include <stdio.h>
    #include <unistd.h>
     
    int main(void){
     
    int pid;
    if((pid = fork() ) ==0){
    /* Processus fils */
     
    printf("le Fils : mon pid est %d, le pid de Mon papa est %d\n", getpid(), getppid());
    //printf("\t\t fork a retourné au pére la valeur %d\n", pid);
     
    }
    else if(pid > 0){
    /* Processus pére */
    printf("le pére : mon pid est %d, le pid de Mon papa est %d\n", getpid(), getppid());
    printf("\t\t fork a retourné au pére la valeur %d\n", pid);
    sleep(2);
     
    }
    else perror("ERREUR dans fork !!! ");
    return 0;
     
    }
    exécuter avec: le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    le Fils : mon pid est 6444, le pid de Mon papa est 6443
    le pére : mon pid est 6443, le pid de Mon papa est 5936
                     fork a retourné au pére la valeur 6444
    Alors franchement je ne comprant pas.

    si quellequ'un peux m'aider.

    Merci.

  4. #4
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Comme il est dit à la ligne 59, %d requiert un int et tu lui passes un _time en parametre et idem pour la seconde erreur. Pour cette dernière, mets un %ld à la place du %d. Pour le premier, castes en int.

    P.S : je te réponds sans vérifier !!

  5. #5
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Par défaut
    Merci,

    en remplacent la ligne 59: par sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    printf("Voici les valeurs du quantum de la politique SCHED_RR, %ld
    secondes, %ld nanosecondes \n", quantum.tv_sec, quantum.tv_nsec);
    mais voila le résultat: en re compilant avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gcc -o exotp2 exotp2.c -lrt TP
    sa donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc: TP: Aucun fichier ou dossier de ce type
    Et avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gcc -o exotp2 exotp2.c -lrt
    le résultat est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    /tmp/ccYanbwC.o: In function `main':
    exotp2.c:(.text+0x110): undefined reference to `sched_getscheduleur'
    collect2: ld returned 1 exit status
    Alors la ce dérnier résultat, je ne c'est même pas ce que sa veux dir ?
    Si quellequ'un peux m'aider.

    Merci d'avance.

    le code du premier poste ce lui que je test qui a donnée c'est résultat:
    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    #include<sched.h>
    #include<sys/wait.h>
    #include<errno.h>
     
    main()
    {
    int ret,pid;
    int politique,status,priorite;
    struct timespec quantum;
    struct sched_param param;
     
    ret=fork();
    if(ret==0)
      { /* Processus fils */
            pid=getpid();
            printf("je suis le fils ma priorité d'ordonnancement est : %d \n",getpriority(PRIO_PROCESS,pid));
     
    politique=sched_getscheduler(pid);
     
          if(politique==SCHED_RR)
             printf("je suis le fils ma prorité d'ordonnancement est SCHED_RR \n");
          if(politique==SCHED_FIFO)
             printf("je suis le fils, ma prorité d'ordonnancement est SCHED_FIFO \n");
          if(politique==SCHED_OTHER)
             printf("je suis le fils, ma prorité d'ordonnancement est SCHED_OTHER \n");
     
    param.sched_priority =10;
    setpriority(PRIO_PROCESS, pid, 10);
     
    if(sched_setscheduler(pid, SCHED_FIFO, &param) == -1)
      perror("problème scheduler");
    priorite = getpriority(PRIO_PROCESS, pid);
    printf("je suis le fils, ma priorité d'ordonnancement est: %d\n", priorite);
     
    politique = sched_getscheduleur(pid);
    if(politique == SCHED_RR)
    printf("je suis le fils, ma politique d'ordonnancement est: SCHED_RR \n");
    if(politique == SCHED_FIFO)
    printf("je suis le fils, ma politique d'ordonnancement est: SCHED_FIFO \n");
    if(politique == SCHED_OTHER)
    printf("je suis le fils, ma politique d'ordonnancement est: SCHED_OTHER \n"); 
    }
     
    else    /* Processus pére */
    {
    printf("Voici les priorités min et max de la politique SCHED_FIFO, %d, %d\n",
           sched_get_priority_min(SCHED_FIFO), sched_get_priority_max(SCHED_FIFO));
     
    printf("Voici les priorités min et max de la politique SCHED_RR, %d, %d\n",
           sched_get_priority_min(SCHED_RR), sched_get_priority_max(SCHED_RR));
     
    sched_rr_get_interval(getpid(), &quantum);
     
    printf("Voici les valeurs du quantum de la politique SCHED_RR, %ld secondes, %ld nanosecondes \n", quantum.tv_sec, quantum.tv_nsec);
     
     wait(&status);
     }
     
    }

  6. #6
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Précise ton système s'il te plaît: kernel, libc, etc.

  7. #7
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Citation Envoyé par bilred Voir le message
    [CODE]
    politique = sched_getscheduleur(pid);
    Normal, cette fonction n'est pas définie !!!

  8. #8
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par publicStaticVoidMain Voir le message
    Normal, cette fonction n'est pas définie !!!
    Bien vu, je n'avais pas remarqué le 'u' en trop. Le prototype de la fonction est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int sched_getscheduler(pid_t pid);

  9. #9
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Par défaut
    Bonjour,

    la fonction marche, je n'est rien changer dans son Nom

    la preuv: ce petit 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
     
    #include<stdio.h>
    #include <sched.h>
     
     
    main()
    {
    int pid;
    int politique;
     
            pid=getpid();
     
    politique = sched_getscheduler(pid);
     
    printf("Politique: %d \n", politique);
     
    }
    il affiche:
    VALEUR RENVOYÉE
    sched_setscheduler renvoie 0 s'il réussit sched_getscheduler renvoie la politique pour le processus s'il réussit.
    En cas d'échec, -1 est renvoyé et errno contient le code d'erreur.

  10. #10
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par bilred Voir le message
    Bonjour,

    la fonction marche, je n'est rien changer dans son Nom

    la preuv: ce petit code
    relis ton premier code, notamment le deuxième appel à cette fonction .

  11. #11
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Par défaut
    C'est bon,

    Merci

    résultat du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    je suis le fils ma priorité d'ordonnancement est : 0
    je suis le fils, ma prorité d'ordonnancement est SCHED_OTHER
    problème scheduler: Operation not permitted
    je suis le fils, ma priorité d'ordonnancement est: 10
    je suis le fils, ma politique d'ordonnancement est: SCHED_OTHER
    Voici les priorités min et max de la politique SCHED_FIFO, 1, 99
    Voici les priorités min et max de la politique SCHED_RR, 1, 99
    Voici les valeurs du quantum de la politique SCHED_RR, 0 secondes, 20001250 nanosecondes

  12. #12
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par bilred Voir le message
    C'est bon,

    Merci

    résultat du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    je suis le fils ma priorité d'ordonnancement est : 0
    je suis le fils, ma prorité d'ordonnancement est SCHED_OTHER
    problème scheduler: Operation not permitted
    je suis le fils, ma priorité d'ordonnancement est: 10
    je suis le fils, ma politique d'ordonnancement est: SCHED_OTHER
    Voici les priorités min et max de la politique SCHED_FIFO, 1, 99
    Voici les priorités min et max de la politique SCHED_RR, 1, 99
    Voici les valeurs du quantum de la politique SCHED_RR, 0 secondes, 20001250 nanosecondes
    Implementations may require that the requesting process have permission to set its own scheduling parameters or those of another process.
    En clair, tu dois être root.

  13. #13
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Par défaut
    Bonjour,

    en utilisant:
    sa donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    je suis le fils ma priorité d'ordonnancement est : 0
    je suis le fils, ma prorité d'ordonnancement est SCHED_OTHER
    je suis le fils, ma priorité d'ordonnancement est: 10
    je suis le fils, ma politique d'ordonnancement est: SCHED_FIFO
    Voici les priorités min et max de la politique SCHED_FIFO, 1, 99
    Voici les priorités min et max de la politique SCHED_RR, 1, 99
    Voici les valeurs du quantum de la politique SCHED_RR, 0 secondes, 20001250 nanosecondes
    !!!!

    Merci

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

Discussions similaires

  1. [VBA-E]{Débutant} Erreurs de compilation
    Par kenny49 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/04/2007, 08h15
  2. Réponses: 15
    Dernier message: 01/11/2005, 13h32
  3. [MASM32][Débutant] Erreur de compilation
    Par Priest dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 02/10/2005, 02h06
  4. Réponses: 12
    Dernier message: 26/08/2005, 10h02
  5. [Débutant]Erreur de compilation inconprehensible
    Par @r$£~%[ dans le forum C++
    Réponses: 15
    Dernier message: 14/08/2005, 20h04

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