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 :

execl rend-elle la main?


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut execl rend-elle la main?
    Quelle est la librairie à charger à la compilation pour utiliser la commande exec?

    Je pensais pas qu'il y en avait besoin, mais :
    C:\JM\sources>gcc -Wall -o serverNT serverNT.c -lwsock32
    serverNT.c: In function `main':
    serverNT.c:135: warning: implicit declaration of function `exec'
    C:\WINNT\Profiles\stagmdc1\Local Settings\Temp\ccMlaaaa.o(.text+0x53b):serverNT.
    c: undefined reference to `exec'
    J'utilise gcc 2.95.2 sous NT.

    Merci,
    JM

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    Pas de biblitheque particuliere, mais un header unistd.h...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Je l'ai mis!
    L'erreur que j'ai cité a lieu lors de l'édition des liens.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Points : 325
    Points
    325
    Par défaut
    Mais exec n'existe pas !

    int execl( const char *path, const char *arg, ...);
    int execlp( const char *file, const char *arg, ...);
    int execle( const char *path, const char *arg , ..., char * const envp[]);
    int execv( const char *path, char *const argv[]);
    int execvp( const char *file, char *const argv[]);

    je suis désolé, je me suis laisse guider par le warning !

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    exec n'existe pas !

    tu as :

    execl, execv, execle, execve, execlp, et execvp (si j'en oublie pas)

    signification:

    l signifie que les parametres sont mis les uns à la suite
    et terminé par un NULL.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    execl ( "/bin/ls",	// chemin d'acces à l'executable
    	"ls",		// parametre 0 (nom du programme)
    	"-l",		// parametre 1
    	NULL);		// fin
    v signifie que les parametres sont mis dans un argv
    (comme celui de la fonction main)

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *argv[] = { "ls", "-l", NULL };
    execv ( "/bin/ls", argv);

    e signifie qu'un argument est ajouté a la fin pour specifier
    les variables d'environnement (sinon les variables d'environnements
    du programme appelant sont utilisé)

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char *argv[] = { "ls", "-l", NULL };
    char *env[] = { "PATH=/bin/:/usr/bin", "HOME=/home/adiguba", NULL };
    execve ( "/bin/ls", argv, env);
    p signifie que le programme sera recherché dans les repertoires
    de la variables d'environnement PATH (on n'est pas obligé de connaitre son
    chemin complet si l'executable est dans un des repertoire du PATH)

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char *argv[] = { "ls", "-l", NULL };
    execvp ( "ls",  // "ls" au lieu de "/bin/ls"
    	 argv);




    Mais pour en revenir à ton probleme...

    Il me semble que les fonctions exec** n'existe pas sous Windows...

    je crois qu'il faut utiliser spawnl() ou qqchose comme ca...

    Pour avancer essaye de lire des tutoriels ou cours pour apprendre la programmation en langage C : http://c.developpez.com/cours/

    a++

  6. #6
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    t'as fais #include <process.h> ???

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par gRRosminet
    t'as fais #include <process.h> ???
    G essayé, çà ne change rien.

    ---------------------------------------

    En fait, je veux exécuter un .bat en lui passant 3 paramètres.
    G essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    system ("test.bat .");
    et
    execl ( "c:\\JM\\sources", "test.bat", ".");
    Ca marche avec system, mais je préfererais avec execl pour pouvoir passer mes paramètres...


    JM

  8. #8
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    y faut pas faire comme ça : execxx se termine par 0 !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execl ( "c:\\JM\\sources", "test.bat", 0);

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par gRRosminet
    y faut pas faire comme ça : execxx se termine par 0 !!!
    Y faut pas faire comme çà non plus!
    Ca fonctionne pas plus!!!

    Merci qd même,

    JM

  10. #10
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chezjm
    execl ( "c:\\JM\\sources", "test.bat", ".");

    Le premier parametre correspond au chemin d'acces COMPLET a l'executable (nom de l'executable compris)

    Essaye ca (sans oublié le 0 à la fin )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execl ( "c:\\JM\\sources\\test.bat", "test.bat", ".", (char*)0);

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    C bon ca fonctionne, je te remercie adiGuba pour le petit détail qui tue! (c tjrs des petits trucs comme çà qui foutent la merde!)

    JM

    PS : Cool! 10 msg y'a l'icone qui bouge maintenant!

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par chezjm
    C bon ca fonctionne
    Ouais, enfin presque.
    Je me rends compte que l'exécution se bloque au niveau de mon appel à execl().
    execl() rend-il la main après l'exécution du programme qu'il lance (ce serait bien...), dès qu'il l'a lancé, pas du tout... ?

    JM

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    J'ai souvenir que le execX ne renvoie rien sauf s'il est mal execute (commande inexistante...).
    Dans le cas ou il arrive a le lancer, c fini ! on ne peut donc pas mettre de code apres un execX.

    Le mieux est de faire un fork() !

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Et avec spawnl, c pareil?
    Tjrs obligé de faire un process fils?

    Pfff, çà fé chié.

  15. #15
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Points : 621
    Points
    621
    Par défaut
    avec spawnxx c'est exactement le même appel sauf que la fonction crée le fils toute seule et te renvoie son pid.
    ça t'arrive de chercher dans l'aide :

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    Ouais ca m'arrive !
    Mais y'a pas de man pour spawn.
    Voilà pourquoi je pose des questions, si elle t'emmerde n'y répond pas!
    (si tu me trouves agressif, c parce que c pas la première fois que le ton que tu emploies me déplait)

    Merci,

    JM

  17. #17
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chezjm
    Mais y'a pas de man pour spawn.
    Normal spawn ne fonctionne que sous windows il me semble...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/05/2007, 10h16
  2. le Timer ne me rend pas la main
    Par toxycyty dans le forum Windows
    Réponses: 10
    Dernier message: 08/11/2006, 17h54
  3. RMAN ne rend pas la main
    Par big1 dans le forum Recovery Manager
    Réponses: 3
    Dernier message: 29/08/2006, 21h18
  4. [Thread du Swing] Rend-moi la main quand t'as fini!
    Par janef dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 25/02/2006, 16h51
  5. Script CMD qui ne rend pas la main
    Par ipeteivince dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 10/06/2005, 12h00

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