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 :

Problème avec execlp()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut Problème avec execlp()
    Bonjour à tous !

    Alors voila mon problème, j'aimerais lancer ls depuis un programme C et écrire le résultat de ce ls dans un fichier (pour traitement ultérieur).

    Pour résumer je voudrais lancer ls > output.txt depuis un programme C

    J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    execlp("ls","ls"," > output.txt", NULL) 
    execlp("ls","ls", ">", "output.txt", NULL)
    Mais ça ne fonctionne pas, j'ai ceci comme erreur : ls: impossible d'accéder à > output.txt: Aucun fichier ou dossier de ce type
    (pour info, même si output.txt existe, j'ai la même erreur)

    Est-ce possible ? Si oui, quelle serait la bonne syntaxe ?

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Les redirections du style ">" ou "<" sont gérée par le shell. Elles ne sont pas interprétées quand tu fais un exec*(), puisque qu'il n'y a pas de shell.

    Tu as plusieurs solutions, en voici quelques unes :

    - utiliser system() plutôt que execlp(). system() lance un shell et lui fait exécuter ce que tu lui passe en argument. Par contre system() fait un fork().

    - utiliser execlp(), mais lui faire exécuter un shell auquel tu passera ton expression en argument d'un -c

    - la solution la plus propre en C, faire la redirection toi même avec un open() et un dup2() entre le fork() et le execlp()

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut
    Donc si j'ai bien compris, ce n'est pas le shell qui execute le ls lorsqu'on passe par execlp ?

    C'est donc bien la sortie standard de C qui est appelée pour faire l'affichage ? Et il suffit donc de rediriger cette sortie ?


  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 486
    Par défaut
    Citation Envoyé par pazze Voir le message
    C'est donc bien la sortie standard de C qui est appelée pour faire l'affichage ? Et il suffit donc de rediriger cette sortie ?

    Oui. Donc, soit tu fermes et réouvres la sortie standard de ton programme vers ton fichier de sortie avant de lancer execlp(). Soit tu fais juste ton execlp(), et tu fais ta redirection sur ton propre programme depuis le Shell :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ ./tonprogramme > output.txt

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut
    Super, j'aurai appris quelque chose
    Merci pour l'info

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 53
    Par défaut
    J'aurais encore une petite question. En fait, je dois à travers de mon programme en C lancer un script. Dans ce script, je dois vérifier que l'utilisateur est bien dans sa $home pour y créer un dossier.

    Lors d'un exec, quel est l'euid ?

    Je suppose que lors d'un exec, ce n'est plus l'user qui a la main et qui exécute le script en question ? Mais c'est le root ?

    [EDIT] J'ai trouvé tout seul. En fait c'est bien le même id que celui qui exécute le programme, mon erreur venait d'autre part !

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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