Dup() linux c/c++

Fermé
jerome - 7 avril 2004 à 09:21
 amazigh - 16 févr. 2010 à 03:36
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
A voir également:

4 réponses

M2 Messages postés 11 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 9 juin 2004 7
28 avril 2004 à 01:14
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
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
Thomas Lopez
20 avril 2004 à 09:54
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
Utilisateur anonyme
20 avril 2004 à 11:07
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