#include <unistd.h>
int dup(int oldfd);
int dup2(int oldfd, int newfd);
Citation :
dup : duplique un descripteur et renvoie le premier descripteur libre dans la table du processus
int fd = open("tutu", O_WRONLY|O_CREAT);
close(STDOUT_FILENO);
dup(fd); // duplique sur 1 puisque après la fermeture c'est le premier numéro de fd libre
// dup duplique pour le descripteur 1 les infos de fd, qui est donc ensuite à l'état ouvert, comme fd.
close(fd); // ne sert plus a rien
printf("tutu" ); // ecrit dans tutu (maintenant associé seulement au descripteur 1)
|
Citation :
dup2 : permet de choisir le descripteur (et écraser l’ancien)
int fd = open("tutu", O_WRONLY|O_CREAT);
dup2(fd, STDOUT_FILENO); // fait un close sur STDOUT_FILENO puis le dup
close(fd); // ne sert plus a rien printf("tutu" ); // ecrit dans tutu
|
et par exemple, avec réversibilité:
int fd = open("tutu", O_WRONLY|O_CREAT);
int fd1 = dup(STDOUT_FILENO); // on duplique pour sauvegarder l'état
dup2(fd, STDOUT_FILENO);
printf("tutu" );
.....
dup2(fd1, STDOUT_FILENO); // On rétablit l'état de stdout
close(fd1);
close(fd);
Bon si tu es sous Windows, il doit (peut-être) y avoir des équivalents: http://www.suacommunity.com/dictionary/dup-entry.php
A+,
Message édité par gilou le 12-06-2012 à 08:57:18
---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --