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 :

Commande shell à écrire en C


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut Commande shell à écrire en C
    Bonjour,
    j'ai cette commande shell à écrire en C :
    exe1 <file -O | exo4 -lix >>results
    J'aimerais savoir si des modifications sont à apporter ou si j'ai oublié des choses

    Merci
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
     
     
    int main (void){
      int p[2];
      int fdfile,fdresults;
      int status;
     
      if(pipe(p)==-1){
        perror("pipe");
        exit(1);
      }
     
      switch(fork()){
      case -1 :
        perror("fork");
        exit(2);
     
      case 0:
        fdfile = open("file", O_RDONLY);
        dup2(fdfile, 0);
        dup2(p[1], 1);
        close(p[0]);
        execlp("exe1", "exe1", "-O", NULL) ;
        perror("execlp" );
        exit(3);
     
      default:
        fdresults = open("results", O_WRONLY|O_CREAT|O_APPEND, 0666);
        dup2(fdresults, 1);
        dup2(p[0], 0);
        close(p[1]);
        execlp("exo4", "exo4", "-lix", NULL) ;
        perror("execlp" );
        exit(4);
      }
      close(p[0]);
      close(p[1]);
    }

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    si j'ai oublié des choses
    A mon avis oui ...

    Ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dfile = open("file", O_RDONLY);
    Teste le retour de open (idem pour dup)

    Tu ne mets pas de return pour cette fonction alors qu'elle en a besoin...

    Enfin :

    Si tu l'utilises, il ne faut pas que tu oublie de mettre un petit include ... (stdio.h)

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Merci pour les précisions.

    Sinon concernant l'utilisation des pipes, fork, la fermeture des fichiers,... c'est correcte?

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Il faut minimiser le numbre d'opération entre le pipe-fork et les close. Je metterai le close comme étant la première opération juste après ton fork.

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

Discussions similaires

  1. commandes pour écrire un shell script
    Par marieGre dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 11/09/2009, 15h32
  2. []Commande shell
    Par phoenix736 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 09/10/2005, 20h31
  3. [Debutant] Commande shell
    Par drosophile dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 21/04/2005, 15h06
  4. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  5. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12

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