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 :

Programmer un shell en C


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Programmer un shell en C
    Bonjour,

    Dans le cadre d'un projet d'études je dois programmer un shell en C, ce shell doit exécuter les commandes tapées par l'utilisateur dans la console.
    Voici mon code :

    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
    17
    18
    19
    20
    21
    22
    23
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <string.h>
     
    #define TAILLE_LIGNE 200
     
    int main ()
    {
      char ligne[TAILLE_LIGNE];
     
      do { printf("> ");
     
           fgets(ligne, TAILLE_LIGNE, stdin);
     
    	if (fork()==0) {execlp(ligne,ligne,NULL);}
     
         }
      while (1);
    }
    Mon execlp ne marche pas si je saisis par exemple ls (sans guillemets) dans la console, alors que si je change le exec pour execlp("ls","ls",NULL). Y-a-t-il une solution pour ne pas avoir à saisir les guillemets quand je tape dans la console.

    Merci de votre aide.

  2. #2
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonsoir,
    Vous êtes bien loin d’un Shell minimaliste ou complets. Il vous manque pas mal de choses à commencer par la bonne utilisation des notions de processus, car votre programme n’est pas du tout à l’abri d’un processus zombie. "Quand on fait appel à fork faut mettre en place des mécanismes pour éviter d’avoir un processus zombie".

    Citation Envoyé par Akroo Voir le message
    ..Y-a-t-il une solution pour ne pas avoir à saisir les guillemets quand je tape dans la console.
    Merci de votre aide.
    Oui il y a un moyen à commencer par analyser la ligne d’entrée c'est-à-dire la commande que l’utilisateur a saisi exemple "touch exemple.txt && cat >> exemple.txt" ou "ls -la" et savoir l’interpréter et exécuter cette commande donc pouvoir isoler et interpréter la commande si je peux dire. Pour faire plus simple il faut comprendre qu’une commande consiste en un nom de commande suivie d’une suite optionnelle d’arguments (qui peut contenir plus de 50 caractères) séparer par des caractères de tabulations ou des blancs donc chacun d’entre eux étant un seul mot ou une chaîne entre guillemets. Il peut y avoir par conséquent des arguments avec des guillemets qui peuvent contenir des caractères spéciaux ( >> | par exemple) ou non. Un shell doit être capable de traiter cette chaîne (mécanisme de pipeline, etc..) Et savoir ce qu’il faut faire.

    Personnellement, je te conseille d’apprendre davantage sur les notions de processus, shell et autre mécanismes du shell puis dans un premier temps être capable de définir ce que c’est qu’une commande (valide et invalide) et argument; Et si possible avec un exemple et par la suite reviens nous voir ont pourras t’apporter de l’aide pour la suite si l’objectif est bien évidemment de réaliser un véritable Shell.
    Voici un lien vers un exemple de Shell à vous de le lire et avoir un aperçu de ce que c'est qu'un shell ou voir les sources Unix concernant le shell Unix
    à bientôt
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

Discussions similaires

  1. Programmation script shell ksh unix
    Par Gourou Dsecours dans le forum Administration système
    Réponses: 3
    Dernier message: 09/10/2009, 15h58
  2. probleme de programmation en shell
    Par black_hole dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 03/04/2008, 19h08
  3. intégrer un programme au shell windows
    Par koolway dans le forum Windows
    Réponses: 7
    Dernier message: 30/10/2005, 19h30
  4. Renvoie d'un programme au shell...?
    Par Invité dans le forum Linux
    Réponses: 4
    Dernier message: 13/05/2005, 15h18
  5. Livre sur la programmation linux (shell et noyau)
    Par Tchetch dans le forum Linux
    Réponses: 10
    Dernier message: 07/07/2004, 08h27

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