2017-08-08 11 views
0

Je vais avoir difficulity comprendre la fonction read en C.fichier des difficultés à comprendre la fonction de lecture C() descripteur

len = read(fd, buf, 32); 

quand je cède fd comme 0,1,2 et exécuter le programme, son fait essentiellement la même chose, quelqu'un peut-il me dire quelle différence cela fait-il?

+0

Savez-vous ce que le fd 0, 1, 2 signifie? –

+2

"faire la même chose" - Que fait-il? Est-ce que vous faites ce que vous attendez? –

+0

Il veut dire descripteur de fichier je pense. –

Répondre

1

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.

2

read() tente de lire les octets à partir du descripteur de fichier fd.

fd = 0 
fd = 1 
fd = 2 

Lit à partir de différents descripteurs de fichier. La différence est que vous lisez des fichiers différents et que les données lues dans le tampon sont différentes. Quelle est la différence entre Book A et Book B? c'est le même processus de lecture d'un livre ... c'est le contenu qui change.

+0

Descripteurs de fichiers différents peuvent faire référence au même fichier –

+0

attendre .. si je l'exécute sur cmd, et sa demande de contribution, quel "livre" est-ce? désolé im un débutant dans cette chose, je fais seulement la programmation compétitive ... –

+0

@ vrai, mais laisse supposer que c'est des fichiers différents. –