Le meilleur scénario pour comprendre dup et dup2 est la redirection.
La première chose que nous devons savoir est que le système a 3 ids de fichiers par défaut (ou variables indiquant les sources de sortie ou d'entrée) qui traitent l'entrée et la sortie. Il s'agit de stdin
, stdout
, stderr
en nombres entiers, ils sont 0
, 1
, 2
. La plupart des fonctions comme fprintf
o cout
sont directement transmises à stdout
.
Si nous voulons rediriger la sortie, une façon est de donner, par exemple, fprintf
fonction plus d'arguments indiquant in
y out
.
Cependant, il existe un moyen plus élégant : nous pouvons écraser les identifiants de fichiers par défaut pour qu'ils pointent vers le fichier que nous voulons recevoir en sortie. dup
y dup2
exactement le travail dans cette situation.
Commençons par un exemple simple : supposons que nous voulions rediriger la sortie de l'application fprintf
dans un fichier txt nommé "chinaisbetter.txt". Tout d'abord, nous devons ouvrir ce fichier
int fw=open("chinaisbetter.txt", O_APPEND|O_WRONLY);
Alors nous voulons stdout
pour pointer vers "chinaisbetter.txt" en utilisant la fonction dup :
dup2(fw,1);
Maintenant stdout(1) pointe vers le descripteur de "chinaisbetter.txt" même si c'est toujours 1, mais la sortie est redirigée maintenant.
Vous pouvez alors utiliser printf
comme d'habitude, mais les résultats seront dans le fichier txt au lieu de s'afficher directement à l'écran :
printf("Are you kidding me? \n");
PS :
-
Ceci ne donne qu'une explication intuitive, vous devrez peut-être consulter la page de manuel ou des informations détaillées. En fait, nous disons "copie" ici, ils ne copient pas tout.
-
L'identifiant du fichier fait ici référence au gestionnaire du fichier. Le descripteur de fichier mentionné ci-dessus est une structure qui enregistre les informations du fichier.
1 votes
Voir aussi dup2 / dup - pourquoi aurais-je besoin de dupliquer un descripteur de fichier ?