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 :

faire un scanf du type pid_t


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Par défaut faire un scanf du type pid_t
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include<stdio.h>
     
    int main(){
     
    pid_t pid;
    scanf("PID de infini: %ld", pid);
    printf("utiliser pour kill le pid = %ld \n", pid);
    }
    Resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    assassin.c: In function ‘main’:
    assassin.c:12: warning: format ‘%ld’ expects type ‘long int *’, but argument 2 has type ‘pid_t *’
    assassin.c:13: warning: format ‘%ld’ expects type ‘long int’, but argument 2 has type ‘pid_t *
    et si j'exécute la valeur de sortie du printf n'a rien a voire avec c'elle du scanf
    je diré que c'est normale.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     ./assassin
    5
    utiliser pour kill le pid = -1076579920
    Mais je ne trouve pas la solution pour lire un type pid_t.

    Merci d'avance pour tout les répances.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 964
    Par défaut
    Citation Envoyé par bilred Voir le message
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #include<stdio.h>
     
    int main(){
     
    pid_t pid;
    scanf("PID de infini: %ld", pid);
    printf("utiliser pour kill le pid = %ld \n", pid);
    }
    Resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    assassin.c: In function ‘main’:
    assassin.c:12: warning: format ‘%ld’ expects type ‘long int *’, but argument 2 has type ‘pid_t *’
    assassin.c:13: warning: format ‘%ld’ expects type ‘long int’, but argument 2 has type ‘pid_t *
    et si j'exécute la valeur de sortie du printf n'a rien a voire avec c'elle du scanf
    je diré que c'est normale.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     ./assassin
    5
    utiliser pour kill le pid = -1076579920
    Mais je ne trouve pas la solution pour lire un type pid_t.

    Merci d'avance pour tout les répances.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    scanf("PID de infini: %ld", &pid);

  3. #3
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    - regarde la doc de scanf (et les valeurs de retour), tu cherche a "parser" "PID de infini:" et le pid.
    - chez moi, sizeof(pid_t) vaut 4 (i.e. sizeof(int)), donc un %d suffit
    - comme l'a dit JeitEmgie (et ton compilo), il faut un pointeur ! et à mon avis le code que tu as posté n'est pas celui qui a généré tes erreurs !

  4. #4
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Par défaut
    Bonjour;
    pour quoi utiliser l'adresse du pid ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("PID de infini: %ld", &pid);
    a son utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include<stdio.h>
    #include<stdlib.h>
    
    int main(){
    
    pid_t pid;
    scanf("%d", pid);
    printf("timeout %d \n", &pid);
    
    }
    le résulta de la compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    assassin.c: In function ‘main’:
    assassin.c:7: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘pid_t’
    assassin.c:8: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘pid_t *
    et a l'exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    10           
    Erreur de segmentation
    je ne c'est d'ou il sorte sa: Erreur de segmentation

    si quellequ'un peux m'aider

    Merci d'avance.

  5. #5
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Citation Envoyé par bilred Voir le message
    Bonjour;
    pour quoi utiliser l'adresse du pid ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("PID de infini: %ld", &pid);
    Euuuuuuuuh, soit tu ne connais pas le C, soit je-ne-sais-pas !
    Comment veux-tu que scanf modifie la variable pid sans donner son adresse ????????????? Le pointeur c'était évidemment pour scanf, pas pour printf qui n'en a pas besoin (il n'a pas besoin de modifier la valeur !!!!!!!!)

    edit: et comme dit dans un autre thread pour le segfault (avec en prime ton exemple ):
    http://fr.wikipedia.org/wiki/Erreur_de_segmentation

  6. #6
    Inactif
    Inscrit en
    Juin 2008
    Messages
    304
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 304
    Par défaut [Débutant]
    Merci

    Oui t’a raisons j’ai confirmé s’affait un bout de temps que je n’est pas programme en C

    Alors une mise à jour c’impose.

  7. #7
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    Bonjour,

    Je ferais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    long temp = pid;
    scanf("%ld", &temp);
    pid = temp;

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

Discussions similaires

  1. [Serialisation] Comment faire dynamiquement selon le type ?
    Par eric.charbonnier dans le forum Framework .NET
    Réponses: 7
    Dernier message: 01/02/2008, 16h17
  2. Comment faire un test de type «StartsWith» ?
    Par Oscar Hiboux dans le forum ANT
    Réponses: 4
    Dernier message: 30/11/2006, 16h11
  3. [Dates] Faire un input de type date
    Par dessinateurttuyen dans le forum Langage
    Réponses: 9
    Dernier message: 18/07/2006, 18h07
  4. comment faire un message de type "alert" en java
    Par fracam dans le forum Composants
    Réponses: 4
    Dernier message: 05/12/2005, 18h03
  5. faire un scanf(ou équivalent) sous BGI
    Par kmele0n dans le forum C
    Réponses: 2
    Dernier message: 02/11/2005, 17h02

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