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 :

erreur de compilation


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 24
    Points : 22
    Points
    22
    Par défaut erreur de compilation
    Bonsoir,

    j'essaye d'écrire un programme qui, pour un pid donné, retourne la liste de ses fils. Ca donne quelque chose comme:

    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
     
    14: void childtree(pid_t pid)
    15: {
    16:   struct task_struct *parentTask;
    17:
    18:   parentTask = find_task_by_pid(pid);
    19:   struct listhead *p;
    20:   struct task_struct *childTask;
    21:   
    22:   list_for_each(p, &parentTask->children)
    23:   {
    24:      childTask = list_entry(p, struct task_struct, sibling);
    25:      prinff("the pid is %d\n", childTask.pid);
    26:   }
    27:}
    Seulement quand je compile, j'ai ces deux erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    bla.c:18: warning: assignment makes pointer from integer without a cast
    bla.c:22: error: dereferencing pointer to incomplete type
    bla.c:23: error: expected ‘;’ before ‘{’ token
    J'ai regardé un peu partout (ici et ici par exemple), et l'utilisation de liste_for_each est exactement la même. j'utilise gcc4.4. Si quelqu'un à une idée, ça serait géniale, car chui en train de devenir chèvre...

    Merci d'avance.

  2. #2
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Tout d'abord, quelques remarques :

    -Tu ne peux pas definir une fonction à l'interieur d'une autre comme tu le fais avec list_for_each() dans childtree().

    -On aimerait bien voir ta fonction find_task_by_pid().

    -Pareil pour task_struct.

  3. #3
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Ta fonction find_task_by_pid doit sûrement retourner un entier alors que parentTask est un pointeur (non initialisé).

    Sinon même remarque que juve1897
    Plus tu pédales moins fort, moins t'avances plus vite.

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    Bonour,

    Citation Envoyé par juve1897 Voir le message
    Tout d'abord, quelques remarques :

    -Tu ne peux pas definir une fonction à l'interieur d'une autre comme tu le fais avec list_for_each() dans childtree().
    ce n'est pas une définition de fonction. J'utilise simplement la macro "list_for_each" pour parcourir la liste "children". enfin j'amerais bien...

    Citation Envoyé par juve1897 Voir le message
    -On aimerait bien voir ta fonction find_task_by_pid().

    -Pareil pour task_struct.
    Ces deux définitions font parti de "sched.h", je les ai pas inventé.

    La fonction find_task_by_pid retourne bel et bien une structure "task_struct" (cf. ici).

    En plus, comme dis dans le premier post, j'utilise exactement la même syntaxe que les sites cités, sans parler des codes sur le net. La franchement je vois ps du tout. Je vous mets es include quand même, on sait jamais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include<stdio.h>
    #include<sys/stat.h>
    #include<stdlib.h>
    #include<sys/queue.h>
    #include<sched.h>
    #include<sys/procfs.h>
    Merci pour vos réponses

  5. #5
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il manque probablement l'include d'un .h
    A vérifier qu'il est effectivement fait dans ce fichier.

    Ce qui me fait dire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parentTask = find_task_by_pid(pid);
    // bla.c:18: warning: assignment makes pointer from integer without a cast
    Si le prototype de find_task_by_pid() est inconnu, la fonction est supposée alors retourner un int

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    list_for_each(p, &parentTask->children)
    // bla.c:22: error: dereferencing pointer to incomplete type
    // bla.c:23: error: expected ‘;’ before ‘{’ token
    1- la définition de la structure struct task_struct semble inconnue (type incomplet)
    2- La macro list_for_each() est inconnue et le compilateur pense qu'il s'agit d'une fonction (et réclame le ; terminant " l'appel")
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 24
    Points : 22
    Points
    22
    Par défaut
    Bon, je crois de toute façon que c'est peine perdue...

    Apparemment, pour utiliser ces fonctions, on doit le faire un mode noyau et non pas utilisateur, ce qui implique l'écriture de code noyau (d'après ce que j'ai compris). Or ce code doit être intégré dans Android dans le cadre d'un projet de fac (on nous a prêté des Dev Phone pour tatouiller un peu dessus), donc ça m'étonnerais beaucoup que ça fonctionne. Si quelqu'un a d'autres idées...sait-on jamais.

    Merci.

Discussions similaires

  1. Erreur de compilation après modification du Uses
    Par DevelOpeR13 dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 14h23
  2. Réponses: 2
    Dernier message: 23/09/2003, 14h32
  3. Réponses: 10
    Dernier message: 22/09/2003, 21h58
  4. Réponses: 4
    Dernier message: 27/08/2003, 21h34
  5. Réponses: 2
    Dernier message: 04/03/2003, 23h24

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