Standard Unix C a cette fonction: mais quels sont les octets maximum que cette fonction "lecture" peut lire 1 fois? p> p>
4 Réponses :
lire () prend un descripteur de fichier ouvert, l'adresse d'un tampon et un nombre, nombre d'octets. Il tente de lire les octets comptant dans le tampon du fichier décrit par le descripteur. Il est important de Assurez-vous que BUF pointe au moins de compter au moins les octets de stockage! p> blockQuote>
Il peut lire autant que votre tampon peut contenir, la limite est SSIZE_MAX et les limites de votre matériel. P>
Vous ne pouvez pas demander plus que Taille_max octets, et puisque vous voulez probablement savoir à quel point vous avez réussi à lire (et à suivre la spécification), vous êtes limité à SSIZE_MAX BYTES.
@janne: Mais Taille_max est 0xFFFFFFFFF (VC ++)! Vous voulez vraiment dire ce nombre?
@Paul: taille_max code>! =
ssize_max code>.
Quoi qu'il en soit, «signé» ou «non signé», ce * _max est toujours un nombre de 32 bits, terriblement volumineux pour un fichier régulier. C'est vraiment bien si possible de lire jusqu'à * _max octets!
généralement, il peut lire autant d'octets qu'il est disponible dans Ainsi, le comportement particulier de C'est pourquoi il est important de toujours vérifier la valeur de retour de buf code>. En réalité, le pilote de périphérique sous-jacent (soyez-lui le système de fichiers ou le réseau, ou un tuyau), reviendrait moins que ce que vous voulez au cas où il n'y ait rien de plus disponible. P>
lu code> dépend du pilote sous-jacent dans le noyau. P>
lire code> et examiner la lecture réelle em> lue. p>
de homme lu (2) code>
: p>
lu () code> tente de lire jusqu'à compter les octets à partir de descripteur de fichier FD dans Le tampon commence à BUF. P>
Si le compte est zéro,
lisez () code> retourne zéro et n'a aucun autre résultat.
si Le nombre est supérieur à ssize_max code>, le résultat n'est pas spécifié. strong> p> blockQuote>
La valeur de
ssize_max code> dépend de votre système, mais il s'agit généralement de la valeur maximale de
signée longue code>, qui est souvent 2 31 sup > (Systèmes 32 bits) ou 2 63 sup> (systèmes 64 bits). P>
2 31 sup> Les octets sont 2 gigaoctets, vous êtes donc probablement en sécurité; En pratique, le pilote de périphérique / tampons / E / S du réseau n'est jamais vous donner une partie de données de 2 gigaoctets en une fois. P>
Devis de IEEE STD 1003.1 (AKA POSIX.1) P>
Si la valeur de nbyte est supérieure à {ssize_max}, le résultat est défini par la mise en œuvre. P> blockQuote>
Vous devez donc vérifier
man 2 lue code> sur votre plate-forme cible. Par exemple, FreeBSD Man dit dans la partie Erreurs: p>
[einval] La valeur nbytes est supérieure à int_max. P> blockQuote>
@Tomalak: La question ne concerne aucune langue.