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

  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".

  7. #7
    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
    Merci de ta réponse, je viens de trouver ce qui n'allait pas:
    je lui ait passé un .c en paramètre et comme celui-ci ne contenait pas de main ça ne risquait pas de fonctionner .

    Par contre maintenant reste à partager une structure entre 2 éxécutables, ça risque de se compliquer un peu plus vue que à ce que j'ai vue c'est normalement impossible

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    tu veux la partager? ou la transmettre?

    Il y a toujours la possibilité de passer par des fichiers temporaires.

  9. #9
    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
    La transmettre plutôt, on m'a proposé de mettre la structure dans un txt pour ensuite la remettre sous forme de structure mais je trouve ça dégueulasse .

  10. #10
    Membre émérite
    Avatar de Kirilenko
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 234
    Par défaut
    Citation Envoyé par Lyysis Voir le message
    La transmettre plutôt, on m'a proposé de mettre la structure dans un txt pour ensuite la remettre sous forme de structure mais je trouve ça dégueulasse .
    Et les tubes ?
    Récursivité en C : épidémie ou hérésie ?

    "Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman

  11. #11
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Pour la transmettre en argument, il te faut une manière de l'écrire en texte, de toute facon.

    Pour la transmettre via un tube (ou pipe en anglais) il te faudra l'écrire dans un fichier que l'autre programme, lancé en même temps, pourra lire.

    il existe un mécanisme, souvent nommé fifo, de tube nommé (mkfifo sous linux)

+ 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