Pour autant que je comprends votre question, il est pourquoi rien ne change si vous lisez de descripteurs de fichiers 0, 1, 2.
Dans un programme normal, le descripteur de fichier 0 est stdin, 1 est stdout et 2 est stderr . stdin est où vous devriez lire votre entrée, 1 est où vous devriez écrire votre sortie et 2 est où vous devriez écrire vos messages d'erreur.
Il n'est pas rare que les trois descripteurs de fichiers pointent vers le même fichier sous-jacent (un fichier peut également être la console, la connexion réseau, etc.) en coulisses. Si vous exécutez simplement votre programme à partir de la ligne de commande, c'est très probable. Dans ce cas, vous pourrez peut-être lire tous les résultats et obtenir exactement le même résultat.
Mais. Ensuite, vous décidez que vous souhaitez enregistrer la sortie du programme dans un fichier et exécutez-le comme ceci: program > output
. Maintenant, le descripteur de fichier 1 ne pointe plus vers le même fichier que stdin et votre programme se casserait. La même chose se produit si vous pointez stderr vers une fonction de journalisation des erreurs. Ou obtenir l'entrée d'un fichier ou d'un tuyau. Ou exécutez le programme dans certains débogueurs. Ou un terminal différent. C'est pourquoi vous ne devriez lire qu'à partir de 0 et pas d'autres descripteurs de fichiers, même si vous pouvez parfois vous en passer.
Savez-vous ce que le fd 0, 1, 2 signifie? –
"faire la même chose" - Que fait-il? Est-ce que vous faites ce que vous attendez? –
Il veut dire descripteur de fichier je pense. –