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 :

utilisation des commandes shell dans un programme C


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut utilisation des commandes shell dans un programme C
    Bonjour,

    Je developpe sur une machine linux, une application en C, avec un interpreteur de commande redumentaire.
    J'ai besoin de pouvoir entrer quelques commandes shell simples style : ls, cd
    a mon interpreteur qui se chargera de recupperer la ligne et de transferer son execution.

    J'ai essayé d'utiliser : ça marche, par contre si je fais : ça ne marche pas, d'apres ce que je comprends c'est paske "cd" est une commande interne au shell et pas un programme externe comme "ls".

    Est ce que quelqu'un peut me dire comment faire pour:
    utiliser des commandes shell depuis un programme en C

    merci!

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Expert confirmé
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Par défaut
    tu ne peux pas passer avec chdir() ?
    tu es sûr que tu utilises systeme ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Oui je suis bien sur d'utiliser "system" sans e au bout.

    J'ai essayé tout cela, sans succes:

    system("cd bin/");
    system("cd /bin");
    system("cd bin/");
    system("cd /bin/");

    system("chdir bin/");
    system("chdir /bin");
    system("chdir bin/");
    system("chdir /bin/");

    avec chdir j'ai meme un message : sh: line1: chdir: command not found
    pourtant quand je la tape eu ligne de commande elle marche ...

    Avez vous d'autres idées ?

    merci.

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("bash -c 'cd bin'");
    pour changer le répertoire courant, utilise chdir

    http://man.developpez.com/man2/chdir.2.php

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Citation Envoyé par rasgueados
    Est ce possible de ne pas creer de nouvelle session shell, et que mes commandes soit appliquées a la session shell de mon programme ?
    Citation Envoyé par laurentschneider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("bash -c 'cd bin'");
    pour changer le répertoire courant, utilise chdir
    Si je comprends bien tu viens de repondre a ma question avant meme d'en avoir eut connaissance !

    par contre je saisi pas la differene entre cd et chdir

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par rasgueados
    si je fais : ça ne marche pas
    C'est a dire [et c'est system(), pas systeme()] ? Il faut bien comprendre que lorsque tu appelles system(), une nouvelle session shell est creee. Ta commande cd est appliquee a cette nouvelle session. Au retour de la fonction system(), la session se termine : il n'y a eu aucun changement pour ton programme (i.e. le cwd du programme est toujours le meme).
    Si tu veux faire plusieurs choses a la suite, il ne faut donc pas faire plusieurs system() de suite, mais un seul qui appelle un script shell contenant la suite d'instructions a appliquer. Si tu veux en plus avoir la sortie du script, il faut rediriger la sortie vers un fichier.
    Un exemple (sans prendre en compte les cas d'erreur, pour simplifier):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    f = fopen("script.ksh", "w");
    fprintf(f, "cd /toto/titi\n");
    fprintf(f, "ls -l");
    fclose(f);
     
    system("script.ksh > script.out");
    /* lire script.out pour avoir le resultat de l'execution du script */
    Tu peux aussi utiliser les fonctions systemes directement.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Citation Envoyé par DaZumba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("script.ksh > script.out");
    Merci pour ton explication, si je veux voir le resultat de l'execution du script sur sur la sortie standard, je fais comment ?
    system("script.ksh > ???

    Citation Envoyé par DaZumba
    Tu peux aussi utiliser les fonctions systemes directement.
    Est ce que tu peux m'un dire un peu plus a ce sujet.

  9. #9
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par rasgueados
    si je veux voir le resultat de l'execution du script sur sur la sortie standard, je fais comment ?
    Ben tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    system("script.ksh");
    Tout court. Mais je ne vois guere l'interet, puisque les infos produites par le script ne sont plus accessibles par le programme. C'est pourquoi on redirige vers un fichier, pour ensuite lire ce fichier et connaitre le resultat de l'execution du script...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    merci pour vos infos,

    J'ai reussi a faire ce que je voulais,
    mon application me propse un menu,
    une entrée du menu correspond a l'execution d'une commande shell, ls, chdir, pwd, clear.
    ce qui me permet de naviguer dans l'arborescence pour que mon application memorise le path de fichiers a utiliser plus tard.

    c'est tres basique, mais facilement comprehensible et reutilisable par un novice.
    pour nous c'est nickel, car ce sur quoi on doit depenser de l'effort.

    Thanx

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Citation Envoyé par rasgueados
    Au cas ou d'autres que moi aurais le meme besoin voici a quoi ressemble mes commandes:

    system("bash -c 'ls -l'");
    system("bash -c 'pwd'");
    chdir("..");
    chdir(path);

    Thanx

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Par défaut
    Citation Envoyé par DaZumba
    Il faut bien comprendre que lorsque tu appelles system(), une nouvelle session shell est creee. Ta commande cd est appliquee a cette nouvelle session. Au retour de la fonction system(), la session se termine : il n'y a eu aucun changement pour ton programme (i.e. le cwd du programme est toujours le meme).
    Est ce possible de ne pas creer de nouvelle session shell, et que mes commandes soit appliquées a la session shell de mon programme ?

    merci encore pour vos lumieres !

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

Discussions similaires

  1. Utiliser des commandes linux dans un shell
    Par Info_76 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 20/03/2008, 12h03
  2. Réponses: 2
    Dernier message: 16/12/2006, 17h37
  3. Erreur utilisation des commandes shell
    Par paolo2002 dans le forum Windows XP
    Réponses: 7
    Dernier message: 05/11/2006, 14h09
  4. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  5. Réponses: 2
    Dernier message: 24/06/2003, 20h31

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