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 :

Commande linux dans un code C


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Par défaut Commande linux dans un code C
    Bonjour,

    Mon code est le suivant:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <stdio.h>
    void main()
    {
        system("cd  rep");
        system("ls");
    }

    Lors de l'exécution, il m'affiche la liste des fichiers et dossiers qui sont dans le répertoire courant et non pas ce qui est dans le répertoire rep.
    Est-ce que vous une idée sur ce problème?

    Merci.

  2. #2
    Membre émérite Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Par défaut
    Bonjour,

    Tout d'abord pour information la fonction "system" est a proscrire, essaye de regarder du coté des fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     exec*             ( execve,execl.. )
    Sinon pour répondre facilement a ta question c'est tout a fait normal tu peux bypasser ce "probleme" (qui n'en ai pas un) de la maniere la moins élégante qui soit mais puisque c'est ton choix, de la maniere suivante:

    je m'excuse d'avance auprés du reste des membres de ce forum..

    Cordialement.

  3. #3
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par messinese Voir le message
    ou Non ?

    Citation Envoyé par messinese Voir le message
    je m'excuse d'avance auprés du reste des membres de ce forum.
    ? Tu veux dire quoi ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  4. #4
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Code c : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include  <stdio.h>
    #include  <stdlib.h>
    #include  <sys/types.h>
    #include  <unistd.h>
    /* Créer un processus fils exécutant un nouveau programme. PROGRAM est le nom 
       du programme à exécuter ; le programme est recherché dans le path.
       ARG_LIST est une liste terminée par NULL de chaînes de caractères à passer 
       au programme comme liste d'arguments. Renvoie l'identifiant du processus
       nouvellement crée. */
    int
    spawn (char *program, char **arg_list)
    {
      pid_t child_pid;
      /* Duplique ce processus. */
      child_pid = fork ();
      if (child_pid != 0)
        /* Nous sommes dans le processus parent. */
        return child_pid;
      else
        {
          /* Exécute PROGRAM en le recherchant dans le path. */
          execvp (program, arg_list);
          /* On ne sort de la fonction execvp uniquement si une erreur survient. */
          fprintf (stderr, "une erreur est survenue au sein de execvp\n");
          abort ();
        }
    }
     
    int
    main ()
    {
      /* Liste d'arguments à passer à la commande "ls". */
      char *arg_list[] = {
        "ls",                       /* argv[0], le nom du programme. */
        "-l",
        "/",
        NULL                        /* La liste d'arguments doit se terminer par NULL.  */
      };
      /* Crée un nouveau processus fils exécutant la commande "ls". Ignore
         l'identifiant du processus fils renvoyé. */
      spawn ("ls", arg_list);
      printf ("Fin du programme principal\n");
      return 0;
    }

    si ça peut aider j'ai retrouvé ça dans un de mes vieux cours de C

  5. #5
    Membre émérite Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Par défaut
    Citation Envoyé par troumad Voir le message
    ou Non ?

    ? Tu veux dire quoi ?
    Salut,
    je veux juste dire que c'est trés crade niveau code je pense que tu sera d'accord ...

  6. #6
    Membre éclairé Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Par défaut
    Merci pour vos réponses.

    Citation Envoyé par messinese Voir le message
    je veux juste dire que c'est trés crade niveau code je pense que tu sera d'accord ...
    moins élégante, crade !! explique nous pourquoi c'est crade, c'est mieux

  7. #7
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par messinese Voir le message
    je veux juste dire que c'est trés crade niveau code je pense que tu sera d'accord ...
    Je suis bien d'accord sur le fait qu'il vaux mieux éviter. Mais parfois, pour un petit programme, c'est tellement plus simple !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  8. #8
    Membre éclairé Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Par défaut
    Merci pour vos réponses.

  9. #9
    Membre émérite Avatar de messinese
    Homme Profil pro
    IT Security Consultant
    Inscrit en
    Septembre 2007
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IT Security Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 429
    Par défaut
    Citation Envoyé par messinese Voir le message
    Bonjour,

    Tout d'abord pour information la fonction "system" est a proscrire, essaye de regarder du coté des fonctions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     exec*             ( execve,execl.. )
    Alors, la différence premiere (bien qu'un peu inutile ici) est que execve prend le meme PID que le processus qui l'aura lancé et arrete ce meme processus a la fin alors que system() cree un nouveau processus puis une fois son exécution finie il revient juste apres son appel pour poursuivre son prologue.

    En effet ici sur un code si léger aucun soucis mais par exemple tu pourrais aussi tout a fait utiliser ce type de code et etre confronté a un probleme de sécurité (faille de type "system") qui permettrai alors l'execution de code avec les droits attribués a ce binaire.

    Une des façons les plus fiable est donc l'emploi d'une fonction de type "exec" afin de palier a ce probleme de sécurité et de prendre de bonne habitude dés le développement de tes codes.

    Pense aussi a inclure afin de les utiliser.

    J'espere t'avoir éclairé .

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

Discussions similaires

  1. Commande Linux dans un code C
    Par chercheur111 dans le forum C
    Réponses: 10
    Dernier message: 18/07/2014, 13h51
  2. Commande linux dans un code java
    Par chercheur111 dans le forum Général Java
    Réponses: 1
    Dernier message: 29/04/2012, 18h07
  3. Réponses: 7
    Dernier message: 09/11/2010, 18h00
  4. [Système] Commande Linux dans Programme PHP
    Par makohsarah dans le forum Langage
    Réponses: 3
    Dernier message: 10/09/2007, 12h36
  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