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

POSIX C Discussion :

probleme de exec [Débutant(e)]


Sujet :

POSIX C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Points : 114
    Points
    114
    Par défaut probleme de exec
    bonjour,

    j aimerai faire un exec d'une commande.

    Cette commande permet de d afficher la premiere ligne d un fichier zippe.

    sur le terminal je fais
    gunzip -c /toto/fichier.gz | head -n 1

    donc logiquement je devrait faire:
    execlp("gunzip", "gunzip", "-c", "/toto/fichier.gz", "|", "head", "-n", "1", NULL);

    Or ca m affiche tout le fichier et non la premiere ligne.
    Si quelqu un voit l erreur.

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Points : 81
    Points
    81
    Par défaut
    Tiens voilà un problème qui va m'interesser sachant que je suis en train de recoder un minishell et que j'allais justement m'interesser aux redirections
    Donc j'en profite pour demander également si quelqu'un sait comment exactement comme ça se passe :p
    (Par exemple quand on fait "cat unfichier | egrep untruc" que fait le shell)

    Sinon berg les commandes exec** ne peuvent executer qu'une et une seule commande (du moins je pense), parce qu'en faite lorsque tu exec un binaire, le processus de ton programme se retrouve remplacé par celui du binaire en question, alors je ne vois pas comment il pourrait en executer plusieurs à la suite

  3. #3
    Expert éminent
    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 : 38
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Ou alors peut on peut être utiliser un system()

    Mais visiblement, ton soucis se passe sur un système UNIX, consulte le forum consacré au développement sur ce système pour avoir d'avantage d'information.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 129
    Points : 128
    Points
    128
    Par défaut
    Normal : execlp exécute un processus => il attend seulement un nom de fichier et des paramètres, or tu lui donnes une commande du shell !
    Le tube anonyme ("|") est géré par ton shell, ce n'est pas un paramètre de la commande gunzip.
    J'imagine que tu cherches à écrire en C, regarde donc du côté de la fonction mkfifo. Sinon tu peux toujours créer un script qui contient ta ligne de commande et exécuter ce script avec la commande execlp.

  5. #5
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    gunzip -c /toto/fichier.gz | head -n 1
    Pourquoi ne pas faire un processus pere et un processus fils et rediriger les entrées/sorties avec un pipe (tube en français je crois )
    que l'entrée de l'un soit la sortie de l'autre?

    La question, est-ce que fork/dup et les fonctions gérant les tubes sont portables?

    Jc

  6. #6
    Expert éminent
    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 : 38
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    La question, est-ce que fork/dup et les fonctions gérant les tubes sont portables?
    En tout cas sous tout les unix, il ne devrait pas y avoir de soucis (fork est POSIX). Mais windows c'est pas question.

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par fearyourself
    Pourquoi ne pas faire un processus pere et un processus fils et rediriger les entrées/sorties avec un pipe (tube en français je crois )
    que l'entrée de l'un soit la sortie de l'autre?
    Et pourquoi pas envoyer le fichier /toto/fichier.gz sur un serveur qui s'occupe de l'extraire puis stocke son contenu dans une table SQL et enfin récupérer la ligne voulue à l'aide d'une procedure stockée transac SDL

    Ou sinon faire simple (je vous promais, des fois ça marche) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system ("gunzip -c /toto/fichier.gz | head -n 1");
    Tu as testé la commande dans une console ? Si ça marche, ça doit marché avec la fonction system !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Points : 81
    Points
    81
    Par défaut
    Le tube anonyme ("|") est géré par ton shell
    Le shell gere comment le pipe d'ailleur? Il creer un genre de fichier temporaire dans lequel il place le resultat de l'un pour etre recupere par l'autre?

  9. #9
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par {Anthony}
    Le shell gere comment le pipe d'ailleur? Il creer un genre de fichier temporaire dans lequel il place le resultat de l'un pour etre recupere par l'autre?
    Ce n'est pas le sujet de la question de berg, il vaut mieux créer un nouveau sujet par question, ça évite la confusion dans les réponses. De plus cette question aurait plus ça place dans le forum Linux !

    Pour répondre à ta question, tout dépend de l'humeur des developpeurs, s'ils ont envis d'utiliser un fichier temporaire pourquoi pas mais le plus souvent, il suffit de rediriger la sortie du premier processus vers l'entrée du second.

    Rediriger un flux de données sous linux

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Points : 81
    Points
    81
    Par défaut
    Ok je te remercie pour ta reponse et par la suite j'eviterai de poser d'autres questions ainsi

Discussions similaires

  1. [Solaris 10] Probleme de exec/execle
    Par warrenz06 dans le forum Unix
    Réponses: 5
    Dernier message: 23/12/2014, 22h30
  2. Probleme de Exec avec passwd
    Par Korri dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 02/05/2008, 14h14
  3. [JAR] probleme d'exec de JAR faisant appel à un autre JAR
    Par guis14 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/01/2006, 09h19
  4. [Process]probleme runtime.exec
    Par stanilas dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 09/08/2005, 07h43

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