2017-04-28 5 views
0

Y at-il une différence entre l'utilisation de read() sous Linux que sous Windows?système de lecture sous Linux vs Windows

Est-il possible que sous Windows, il lise généralement moins que ce que je demande, et sous Linux il lit généralement autant que je le demande?

Répondre

5

read n'est pas une fonction c standard. Historiquement, il s'agit d'un syscall posix, et en tant que tel, Windows (en supposant que Windows signifie MSVC) n'est pas nécessaire pour l'implémenter du tout. Pourtant, ils ont essayé. Et nous pouvons comparer les deux implémentations:

linux:

http://man7.org/linux/man-pages/man2/read.2.html

En cas de succès, le nombre d'octets lus est renvoyé (zéro indique la fin de fichier), et la position de fichier est avancé par ce numéro. C'est pas une erreur si ce nombre est plus petit que le nombre d'octets demandé; cela peut arriver par exemple parce que moins d'octets sont actuellement disponibles (peut-être parce que nous étions proches du fichier fin de , ou parce que nous lisons depuis un tube ou depuis un terminal), ou car read() était interrompu par un signal. Voir aussi NOTES.

fenêtres:

https://msdn.microsoft.com/en-us/library/ms235412.aspx

https://msdn.microsoft.com/en-us/library/wyssk1bs.aspx

_read renvoie le nombre d'octets lus, ce qui pourrait être inférieure à compter s'il y a moins de compter octets laissés dans le fichier ou si le fichier a été ouvert en mode texte, auquel cas chaque paire de fils de retour de ligne de chariot (CR-LF) est remplacée par un seul caractère de saut de ligne. Seul le caractère saut de ligne unique est compté dans la valeur de retour. Le remplacement n'affecte pas le pointeur de fichier.

Vous devriez donc vous attendre à ce que les deux implémentations retournent moins que le nombre d'octets demandé. De plus, il y a une nette différence lors de la lecture de fichiers en mode texte.