Annuler une redirection

Tutu -  
 kmf -
Bonsoir a tous,

J'ai un probleme en programmation systeme Unix en C :
Voici le code :

int tube[2];

dup2(tube[0], STDIN_FILENO);

Avec ceci je redirige l'entree standart vers tube[0]. C'est a dire que lorsque le programme va lire a l'entree standart, il lira dans tube[0].

Seulement, par la suite j'ai besoin d'annuler cette redirection. C'est a dire que je ne veux plus lire l'entree standart dans tue[0]. Je veux que cela redevienne normal.

Une solution ?

merci.

2 réponses

tutu
 
Je viens de trouver :)

Pour annuler il faut faire lire l'entree standart à la sortie standart tout simplement :
dup2(STDOUT_FILENO, STDIN_FILENO);
0
kmf
 
J'ai l'impression que le dup2 ecrase (en quelque sorte) le STDIN_FILENO par la valeur de tube[0]. Si tu veux recuperer le comportement normale il faudrait sauvegarder l'ancien valeur de STDIN_FILENO quelques part sur une autre variable entier de type file-descriptor (a l'aide aussi de "dup2" ou peut-etre de "fcntl" avec les bonnes options ?). Apres on pourrait remettre l'ancienne valeur sur STDIN_FILENO et l'entree standard devrait redevenir normale (en theorie). Je ne suis pas 100% sur si ca marche comme ca car je n'ai jamais utilise les fonctions dup2, fcntl, ...

Moi je fais toujours de facon naive et simple:

Si je veux lire d'autre chose que l'entree standard je fais:
FILE *fp;
fp=fopen("fichier","r");
fscanf(fp, ....)

et si je veux passer a l'entree standard plus tard je fais:
fclose(fp);
fp=stdin;
fscanf(fp, ...);

comme ca on peut utiliser "fp" a la fois pour un fichier ou l'entree standard dans le meme program.

Tu es sur d'avoir besoin de truc "dup2" pour resoudre ton probleme ?
0