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 :

probleme de redirection avec open et dup2


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Par défaut probleme de redirection avec open et dup2
    bonjour à tous,
    je dois finir en tp en L3 info mais je galère on me demande de faire un mini shell et de faire les redirections donc avec une fonction redirection.....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int redirection (char *argv[], char * in,char * out)
    {
    int desc1, desc2;
    desc1=open ( in, O_RDONLY);
    desc2=open( out, O_WRONLY | O_CREAT | O_APPEND);
    dup2(desc2,desc1);
    return 0;
    }
    mais malheureusement ca marche pas du tout,
    deja j'ai desc2 qui prend la valeur -1 donc une erreur et donc j'ai essayé de créer le fichier avec creat.... mais ca marche toujours pas car dup2 ne change pas la valeur de desc2...
    la variable errno vaut 0 apres desc2 et dup2


    merci a tous ceux qui vont m'aider

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Par défaut
    je rajoute des indication peut etre
    je fais un minishell
    argv contient une liste de commande
    argv[0] contien le fichier d entrer qui est aussi in
    argv[1] contien > ou <
    argv[2]contien le fichier de sortie qui est aussi out

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Par défaut
    C'est int descripteur = dup2(source, destination)

    l'appel à la fonction ferme le fichier destination. Dans le cas des e/s standard

    on aurait dup2(in, 0), dup2(out, 1) et dup2(err, 2)

    La procédure à suivre est donc de dupliquer le descripteur standard, d'assigner le nouveau et de le réaffecter ensuite à sa valeur d'origine, 3 appels a dup2 donc pour chaque descripteur. Bon courage.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Par défaut
    il n'y a pas moyen de changer la valeur du descrupteur de out... snif je n'ay arrive pas même avec ta maniére. Avec ddd je vois que la valeur du descripteur de out ne change pas du tout snif.... encore un peu d'aide svp j'y suis presque........

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Par défaut
    Je n'ai pas de compilateur sous la main. Ca devrait être quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int anc_sortie ;
    int nouv_sortie ;
    int res ;
     
    nouv_sortie = open(...
     
    anc_sortie=dup(STDOUT_FILENO) ;
    res= dup2(nouv_sortie, STDOUT_FILENO) ;
     
    /* ici on utilise la redirection */
     
    close(nouv_sortie) ;
    res = dup2(anc_sortie, STDOUT_FILENO) ;

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Par défaut
    voila ce que j'ai fait d'apres tes conseil mais ca ne marche toujours pas ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int desc1,desc2,desc3;
    desc1=open(in,O_RDONLY);
    desc2=open(out,O_WRONLY | O_CREAT);
    desc3=dup2(desc1,STDOUT_FILENO);
    close(desc1);
    desc3=dup2(desc2,STDOUT_FILENO);
    je rappele que je dois juste faire un mini-shell en faisan la gestion dezs redirections vers des fichiers en entre < et en sortie >;
    tout ce que je fais la c'est dans le cas ou en ligne de commande on tape par exemple:entrée > sortie;
    merci beaucoup pour ton aide.. j'y suis presque

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/06/2008, 13h40
  2. [vb6]=Probleme avec open for append
    Par prison_break dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/01/2007, 13h40
  3. Probleme de redirection avec Header
    Par ehmppowa dans le forum Langage
    Réponses: 7
    Dernier message: 28/12/2006, 18h26
  4. [xmlhttprequest] probleme avec open
    Par gorgonite dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/05/2006, 21h04
  5. Petit probleme stup**** avec Open
    Par Maxbrad dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/11/2005, 21h38

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