Dup() linux c/c++

jerome -  
 amazigh -
Salut

Voila je suis entrain d'apprendre la programmation sous linux en c/c++ pour créer des tubes, et je bloque sur la commande dup() (je ne comprends pas a quoi ca sert).

Merci de vos réponse

4 réponses

  1. M2 Messages postés 11 Statut Membre 7
     
    Ce code permet de rediriger la sortie standard vers un fichier
    (on fait de meme pour l'entree std en changeant qq trucs...)

    void
    substituer_sortie(char *fichier)
    {
    int fd;
    fd = open(fichier, O_WRONLY | O_CREAT, 0600);
    dup2(fd, 1);
    close(fd);
    }
    7
  2. amazigh
     
    Les appels dup et dup2 permettent de dupliquer des entr´ees de la table des descripteurs du
    processus.
    int descripteur2 = dup(int descripteur1);
    1. v´erification que descripteur est le num´ero d’une entr´ee non nulle.
    2. recopie dans la premi`ere entr´ee libre du tableau des descripteurs l’entr´ee correspondant `a
    descripteur1.
    3. le compteur de descripteurs de l’entr´ee associ´ee `a descripteur1 dans la table des ouvertures
    de fichiers est incr´ement´e.
    4. renvoi de l’indice dans la table des descripteurs de l’entr´ee nouvellement allou´ee.
    Redirection temporaire de la sortie standard dans un fichier :
    tempout = open("sortie_temporaire",1);
    oldout = dup(1);
    close(1);
    newout = dup(tempout); /* renvoie 1 */
    write(1,"xxxx",4); /* ecriture dans le fichier temporaire */
    close(tempout);
    close(1);
    newout = dup(oldout);
    close(oldout);
    Il est aussi possible de choisir le descripteur cible avec
    int ok = dup2(int source, int destination);
    Recopie du descripteur source dans l’entr´ee destination de la table des descripteurs. Si
    destination d´esigne le descripteur d’un fichier ouvert, celui-ci est pr´ealablement ferm´e avant
    duplication. Si destination n’est pas un num´ero de descripteur valide, il y a une erreur, retour
    6
  3. Thomas Lopez
     
    Bonjour, j'ai le même problème que Jérome.... s'il vous plait aider nous sur la fonction dup().
    Cordialement
    Lopez thomas
    0
  4. Utilisateur anonyme
     
    C'est assez simple en réalité. C'est utile pour rediriger la sortie std dans un FIFO.
    En gros, il faut créer un tube, on a donc un descripteur de fichier.
    Ensuite, dans la table des descripteurs du système, on ferme celui correspondant au flux qu'on veut rediriger.
    Finalement, on utilise dup() pour dupliquer le descripteur de notre tube dans la table des descripteurs, et notre descripteur va automatiquement se placer à la premiere place libre.

    Je ne peux pas vous donner le code, le C ca fait longtemps que j'en ai pas fait. Mais c'est une bonne piste!!
    Bon courage!

    Fat_Cartman,
    Parce que je le vaux bien... 
    0