Lors de la lecture d'un tuyau sous Linux (C, fread/similaire), lorsque EOF est atteint, comment peut-il être connu combien d'octets ont été lus? Si je lis des blocs à la fois, fread() ne retourne le nombre de blocs entiers lu, et je ne peux pas lire un octet à la fois parce que c'est trop lent. Bien sûr, ftell() renvoie -1.Nombre d'octets lus à partir d'un tuyau
1
A
Répondre
6
Vous pouvez le faire avec fread()
en définissant le size
param sur 1 et définir le nmembers
à la taille que vous voulez. Ensuite, le nombre de « membres » est le nombre d'octets et vous pouvez toujours avoir un tampon de taille décente:
char buf[8192];
size_t n;
n = fread(buf, 1, sizeof buf, f);
au lieu de
char buf[8192];
size_t n;
n = fread(buf, sizeof buf, 1, f);
1
read()
retourne le nombre d'octets lus (quand rien ne se passe mal).
Questions connexes
- 1. Nombre d'e-mails non lus dans Gmail
- 2. appSettings n'étant pas lus à partir de machine.config dans Vista
- 3. longueur variable des arguments lus à partir de variables Matlab
- 4. Python - lignes de lecture simples à partir d'un tuyau
- 5. Vérifier le nombre de messages Gmail non lus avec Python
- 6. Comment renvoyer le nombre de messages non lus d'un utilisateur à partir d'une boîte de réception Exchange?
- 7. F # tuyau fourche
- 8. Les plistes peuvent-ils être lus en toute sécurité à partir d'une source non fiable?
- 9. Quels PEP doivent être lus?
- 10. Est-il possible de faire lire gcc à partir d'un tuyau?
- 11. question de tuyau nommé bidirectionnel
- 12. C#/Tamir.SharpSsh: System.IO.IOException: Tuyau fermé
- 13. Sortie de shell de tuyau à svn del commande?
- 14. Shell: SVN statut tuyau à php pour vérifier la syntaxe
- 15. Saisir un nombre à partir d'une chaîne non numérique
- 16. MySQL: Récupération du nombre d'enregistrements à partir d'une période donnée
- 17. nombre de fichiers générés à partir de la commande fractionnée
- 18. POSTER un nombre arbitraire d'enregistrements à partir d'un formulaire HTML
- 19. Obtenir un nombre à partir d'une chaîne de chaînes SQL
- 20. extraction d'un nombre à partir d'une chaîne en Java
- 21. Stratégies de tuyau nommées avec mémoire dynamique?
- 22. Comment faire une boucle de tuyau en bash
- 23. Récupérer les messages non lus, par utilisateur
- 24. Obtenir la quantité d'octets lus par javax.xml.stream.XMLStreamReader
- 25. Distinguer un tuyau d'un fichier dans Windows
- 26. Sélection des enregistrements à partir d'un grand nombre à la conception de nombreux
- 27. Obtention d'un nombre spécifique de lignes à partir de db à l'aide de nhibernate
- 28. Comment marquer des éléments lus avec google reader API?
- 29. Comment gérer un tuyau cassé (SIGPIPE) en python?
- 30. Un tuyau brisé ne termine plus les programmes?
aura-t-il lu beaucoup à la fois (rapide), ou lire un à un (lent)? Je pense que « l'un à la fois » est pourquoi il a à la fois la taille et compte des arguments, non seulement un argument de taille. – c4757p
Heureusement pour nous, il va lire autant que possible, jusqu'à la taille '* nmembers' octets. – dwc
@ c4757p, la taille et le nombre sont là pour encourager exprimer clairement une lecture des n éléments d'un tableau. Ils n'ont aucun effet (autre que leur total) sur les appels read() sous-jacents. – RBerteig