A voir également:
- C dup
- Dup detector - Télécharger - Bureautique
- Dup guru - Télécharger - Nettoyage
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
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);
}
(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);
}
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
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
Bonjour, j'ai le même problème que Jérome.... s'il vous plait aider nous sur la fonction dup().
Cordialement
Lopez thomas
Cordialement
Lopez thomas
Utilisateur anonyme
20 avril 2004 à 11:07
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...
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...