Annuler une redirection
Tutu
-
kmf -
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.
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.
A voir également:
- Annuler une redirection
- Comment annuler une offre sur vinted - Guide
- Annuler fermeture onglet chrome - Guide
- Annuler une commande aliexpress - Forum Consommation & Internet
- Avertissement de redirection - Forum Réseaux sociaux
- Annuler une offre sur vinted - Guide
2 réponses
Je viens de trouver :)
Pour annuler il faut faire lire l'entree standart à la sortie standart tout simplement :
dup2(STDOUT_FILENO, STDIN_FILENO);
Pour annuler il faut faire lire l'entree standart à la sortie standart tout simplement :
dup2(STDOUT_FILENO, STDIN_FILENO);
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:
et si je veux passer a l'entree standard plus tard je fais:
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 ?
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 ?