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 :

utilisation de execlp


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 102
    Par défaut utilisation de execlp
    bonjour tout le monde,
    j'ai un petit problème avec la fonction execlp:

    Mais commençons par le début: je génère un menu en fonction du contenue de ce qui se trouve dans mon répertoire donc, je stocke tous mes fichiers .c dans un tableau et mon utilisateur choisit.

    Sauf que quand je fais mon execlp sur mon .c ça me fait une erreur de segmentation (core dumped) et je ne comprend pas pourquoi :/

    un petit bout de code pour mieux cerner le problème:
    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
     
     
    	printf("Choice: \n");
    	scanf("%d", &choice);
    	printf("\n");
    	for (i=0;i<cptBis;i++){
    		printf("%s\t", tabChoix[i]);
    	}
    	printf("%d\t", cptBis);
    	if(choice>='0' && choice<cptBis){
    		printf("%s\n", tabChoix[choice]);
    		if(execlp(tabChoix[choice], tabChoix[choice], PROC, nbProc, NULL)==-1){	
    			puts("erreur1");
    		}
     
    	}else puts("erreur2");

  2. #2
    Expert confirmé
    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
    Par défaut
    Il y a très probablement une erreur ici due aux ' ':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(choice>=0 && choice<cptBis){

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 102
    Par défaut
    Je ne pense pas que ça implique une erreur car choice est un char et il rentre quand même dans la boucle.

  4. #4
    Expert confirmé
    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
    Par défaut
    Cela fait une différence : dans le cas de '0', c'est équivalent à choice >= 48 (si tu es en ASCII) au lieu de choice positif ou nul.

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 102
    Par défaut
    Sur tes conseils (et comme dans la seconde partie je le compare à un int) je l'ai modifié mais ça ne résout malheureusement pas mon problème de base :s .

  6. #6
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    Citation Envoyé par lyysis
    je l'ai modifié mais ça ne résout malheureusement pas mon problème de base :s
    Et bien, justement. Je ne comprends ta façon de faire. Si tu soupçonnes une mauvaise utilisation de ta part de execlp, pourquoi testes-tu du code où l'appel à execlp est véritablement noyé dans plein d'autres choses qui, apparemment - tes échanges avec diogene - ne sont pas "nickel" ?

    Ecris un petit - minuscule - petit programme jetable (cible_execlp) comme celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
    #include <stdlib.h>
    int main(int argc,char *argv[0])
    {
        int i;
     
        fprintf(stdout,"je suis %s\n",argv[0]);
        if (argc == 1)
            fprintf(stdout,"je n'ai pas recu d'argument\n");
        else
            for (i=1;i<argc;i++)
                fprintf(stdout,"argument %d : %s\n",i,argv[i]);
        return 0;
    }
    et un autre, jetable lui aussi, minimaliste, qui validera ce que tu as compris de l'utilisation de execlp (un "appel" de cible_execlp via execlp). J'en ai fait un (appelant_execlp.c) qui fait, royalement 10 lignes et tout ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    plx@sony:~$ ./appelant_execlp 
    je vais de suite appeler execlp sur "cible_execlp" avec les arguments "1" "deux" "3" NULL
    je suis cible_execlp
    argument 1 : 1
    argument 2 : deux
    argument 3 : 3
    plx@sony:~$
    Tu sauras, une bonne fois pour toutes, si tu as bien compris le fonctionnement de execlp et de ses arguments et, si ça marche, tu sauras que c'est lors de l'appel que ça "foire".

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

Discussions similaires

  1. Utilisation de la commande execlp
    Par IenchGaleu dans le forum C
    Réponses: 0
    Dernier message: 23/12/2011, 16h43
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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