Taille du tampon par défaut pour un fichier sous Linux
La la documentation stipule que la valeur par défaut pour la mise en mémoire tampon est: If omitted, the system default is used
. Je suis actuellement sur Red Hat Linux 6, mais je ne suis pas en mesure de comprendre la valeur par défaut de mise en mémoire tampon est définie pour le système.
Quelqu'un peut-il svp me guider quant à la façon de déterminer la mise en mémoire tampon d'un système?
source d'informationauteur name_masked
Vous devez vous connecter pour publier un commentaire.
Depuis que vous avez accédé à la 2.7 docs, je suis en supposant que vous êtes en utilisant 2.7. (En Python 3.x, tout cela devient beaucoup plus simple, parce que beaucoup plus de la mise en mémoire tampon est exposée au Python.)
Tous
open
en fait (sur les systèmes POSIX) est appelfopen
et puis, si vous avez passé quoi que ce soit pourbuffering
setvbuf
. Puisque vous n'êtes pas passer quelque chose, vous avez juste à la fin avec la valeur par défaut de la mémoire tampon defopen
qui est à votre bibliothèque C standard. (Voir la source pour plus de détails. Sansbuffering
il passe de -1 àPyFile_SetBufSize
qui ne fait rien de moins quebufsize >= 0
.)Si vous lisez le la glibc
setvbuf
page de manuelil explique que si vous n'avez jamais d'appeler des fonctions de mise en mémoire tampon:Notez qu'il ne dit pas quelle est la taille de la mémoire tampon est obtenu. Cela est intentionnel; il signifie la mise en œuvre peut être intelligent et de choisir différentes tailles de mémoire tampon pour les différents cas. (Il y a un
BUFSIZ
constante, mais qui n'est utilisé que lorsque vous appelez les fonctions héritées commesetbuf
; il n'est pas garanti pour être utilisé dans tous les autres cas.)Donc, ce ne arriver? Eh bien, si vous regardez la glibc source, en fin de compte il appelle la macro
_IO_DOALLOCATE
qui peut être accroché (ou remplacé, parce que la glibc unifie C++ streambuf et C stdio mise en mémoire tampon), mais en fin de compte, il alloue un buf de_IO_BUFSIZE
qui est un alias de la plate-forme de macro spécifique_G_BUFSIZE
qui est8192
.Bien sûr, vous voulez probablement trace vers le bas les macros sur votre propre système, plutôt que de faire confiance à la générique de la source.
Vous demandez peut-être pourquoi il n'est pas bien documentée de façon à obtenir cette information. On peut supposer que c'est parce que vous n'êtes pas censé soins. Si vous avez besoin d'un taille de la mémoire tampon, vous pouvez manuellement; si vous avez confiance que le système connaît le mieux, seulement de la confiance. Sauf si vous êtes vraiment en train de travailler sur le noyau ou de la libc, qui s'en soucie? En théorie, cela laisse ouverte la possibilité que le système pouvait faire quelque chose d'intelligent ici, comme de choisir un bufsize basé sur la taille de bloc pour le fichier du système de fichiers, ou même basé sur l'exécution des stats de données, bien qu'il ne ressemble pas à linux/glibc, FreeBSD, ou OS X rien faire d'autre que d'utiliser une constante. Et le plus probable, c'est parce qu'il n'a pas vraiment d'importance pour la plupart des applications. (Vous pouvez tester que sur vous-même—l'utilisation explicite de la mémoire tampon d'une taille allant de 1 KO à 2 mo sur certains tampon-I/O-lié script et voir ce que les différences de rendement sont.)
Je ne suis pas sûr que c'est la bonne réponse mais python 3.0 bibliothèque et python 20 bibliothèque à la fois de décrire
io.DEFAULT_BUFFER_SIZE
de la même manière que la valeur par défaut est décrit dans la documentation pouropen()
. Coïncidence?Si non, alors la réponse pour moi était:
J'ai fait "l'homme setvbuf" pour trouver ce. setvbuf est note de bas de page [2] de la page de documentation.