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 :

Executer commande à partir d'un String


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Par défaut Executer commande à partir d'un String
    Bonjour à tous,
    Je suis actuellement sur un projet informatique pour les cours. Je suis entrain de travailler sur des sockets, etc.
    Ce que j'aimerais faire, c'est que mon côté serveur après avoir reçu une chaine de caractère et l'avoir stocké dans son buffer (ça c'est bon) puisse exécuter ce string comme une commande console.
    Pour bien me faire comprendre je vous fais un petit exemple:
    Coté client je tape: "dir"
    Coté serveur je recois "dir", je le stocke dans mon buffer avec recv. Ensuite je prends ce buffer, je lis la commande et je l'exécute. Résutat: J'affiche la liste du répertoire.

    Ca parait assez bateau comme ça mais ça me vaut quelques migraines assez pénibles. Si quelqu'un pouvait m'aiguiller un peu ça m'arrangerait beaucoup.
    Merci d'avance.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tiens, j'ai l'impression qu'un cours arrive

    2 questions en 2h

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    C'est pour quel système ?

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Par défaut
    C'est pour du Windows (d'où l'exemple avec le dir ) mais pourquoi pas sur du Linux si c'est portable

    @souviron34: Ah y'a eu la même question que moi ?

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Si tu peux te contenter d'un serveur (le programme qui reçoit les commandes et qui les exécutes) qui n'envoie pas les résultats de la sortie en temps réel (c'est-à-dire attend la fin de la commande avant d'envoyer les résultats), tu n'as qu'à utiliser la fonction system (stdlib.h) pour exécuter la commande reçue. Utilise > pour récupérer la sortie dans un fichier. Par exemple : dir > resultat_dir.txt. Tu envoies ensuite le contenu de ce fichier au client. Ca fonctionne aussi bien sous Windows que sous Linux.

  6. #6
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Ne serait-ce pas tout simplement un interpréteur de commandes que tu veux faire? Dans ce cas, un tableau de structures contenant une chaine (le libellé de la commande) et un pointeur sur fonction (le code de la fonction à exécuter). On parcourt le tableau en comparant la chaine reçue avec la chaine de la structure. Si elles sont égales, on exécute la fonction pointée par le pointeur de fonction. Si on arrive à la fin tu tableau, on affiche "Commande inconnue"

    A+

    Pfeuh

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Par défaut
    @Melem:
    Niquel ca fonctionne avec ta méthode. J'ai fait un petit truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char commande[1024];
    sprintf(commande, "%s > resultat_dir.txt", buffer);
    system(commande);
    Sinon, tu parlais d'une réponse en temps réel. Si tu connais la méthode je veux bien que tu m'expliques (sauf s'il faut utiliser la fonction select des sockets que je n'ai pas encore du tout abordé en cours).
    Merci encore

    @Pfeuh:
    Hé bien non il ne s'agit pas d'un interpréteur de commande. En fait je dois simplement établir une liaison entre 2 ordinateurs et lui demander d'exécuter une commande (dans le cadre de l'exercice, simplement la commande dir pour les windowsiens et ls pour les linuxiens).

  8. #8
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Si le serveur est une application console, tu peux faire un truc portable entre Windows et Linux (en fait tous les systèmes supportant POSIX) en utilisant la fonction popen qui ressemble assez à la fonction system mais qui retourne en plus un FILE * grâce auquel tu pourras lire la sortie standard du processus en temps réel. Si tu développes une application "purement Windows" (c'est-à-dire avec point d'entrée WinMain et non main), tu ne peux pas utiliser popen (la raison est expliqué dans MSDN) mais CreateProcess qui est une fonction spécifique à Windows donc tu perdras en portabilité. En plus je peux te dire que ce n'est pas très nsimple.

Discussions similaires

  1. Executer commande avancée linux à partir de Django
    Par cobra85 dans le forum Django
    Réponses: 2
    Dernier message: 16/07/2014, 09h04
  2. Executer un calcul à partir d'un string
    Par gnstian dans le forum VBA Access
    Réponses: 6
    Dernier message: 20/10/2011, 11h59
  3. Executer du code C à partir d'une string.
    Par barbare128 dans le forum C
    Réponses: 16
    Dernier message: 27/06/2006, 00h59
  4. [VB6][Débutant] Execute une commande à partir d'une chaine
    Par Bluespike62 dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 09/05/2006, 16h43
  5. Réponses: 9
    Dernier message: 04/09/2004, 19h15

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