Quels sont les avantages de pwrite et pread sur fwrite et fread?
Hey s'il vous plaît ne me dérange pas si je me suis poser des question triviale, mais, svp quelqu'un peut-il m'aider avec ce..
Double Possible de Quelle est la différence entre lire et pread dans unix?
OriginalL'auteur Invictus | 2011-09-29
Vous devez vous connecter pour publier un commentaire.
C'est utile lorsque vous ne hasard de la lecture/écriture. Il y a même une option pour Sqlite qui remplace
seek()
+read()
etseek()
+write()
avecpread()/pwrite()
. Pourquoi est-il utile?seek()
+read()
etseek()
+write()
sont tous les deux une paire de sys-appels tout enpread()
etpwrite()
sont unique sys-appels. Moins sys-appels - pour plus d'efficacité.pread/pwrite sont POSIX appels système(par exemple, Linux, FreeBSD...). ils travaillent avec UNIX descripteurs de fichier qui sont entiers. vous pouvez en obtenir un en utilisant open() syscall(fonction). regardez linux.die.net/man/2/pwrite
peut être converti en raw
int
fd
avecfileno(3)
si vous voulez utiliserfopen
mais parfois l'utilisation de la sous-jacentesfd
avec le faible niveau des appels système. Notez que le faible niveau des appels système ne vois pas l'utilisateur de l'espace de mise en mémoire tampon destdio
FILE*
objets, de sorte que vous pourriez avoir des problèmes si l'utilisateur de l'espace de mémoire tampon dit une chose, et vous le contourner avec directwrite
/pwrite
/read
/pread
appels.OriginalL'auteur GreenScape
Il y a deux parties:
Différence entre
pread
/pwrite
etread
/write
:Ils sont tous les deux au même niveau, à savoir les appels système. Il y a deux différences:
Différence entre
read
/pread
/write
/pwrite
etfread
/fwrite
:Le "f" variantes standard d'exécution des wrappers de l'ancien (à l'aide de la base de variantes). Ils soutiennent les processus de mise en mémoire tampon. Qui peut de manière significative améliorer les performances de code simple, mais il fait appel à d'autres caractéristiques de l'appel-système de niveau de pratique.
Utilisez uniquement le "p" variantes si vous avez un bon usage de la lecture au hasard des décalages (en évitant les cherche et permettant l'accès simultané via un descripteur de fichier), ce qui est souvent le cas avec certains types de fichiers de base de données (enregistrement axée sur les registres à décalages) et plus rarement dans d'autres applications.
Hm, à droite. J'ai mal rappelé quelque chose et n'a pas fait de lire la page de man à travers, mais je n'ai pas l'ouvrir.
Hey mais comment puis-je obtenir le fichier discriptor.... Quand je fopen il me renvoie un pointeur de fichier, alors comment puis-je obtenir un int fichier discriptor???
Utilisation
open
avecread
,write
,pread
etpwrite
et l'utilisationfopen
avecfread
,fwrite
etfprintf
. Ils sont différents au niveau de l'interface et ne se mélangent pas bien (il y a des fonctions pour convertir le format de fichier à l'autre, mais vous avez vraiment comprendre comment la stdio couche œuvres avant de les utiliser).Ne pas pread ont mise en mémoire tampon de soutien? Je pense que le noyau est en train de faire une sorte de mémoire cache/tampon pour les e / s de Fichier, sauf si vous utilisez O_DIRECT pour ouvrir un fichier. N'est-ce pas?
OriginalL'auteur Jan Hudec
Position courante dans le fichier ne change pas après un appel à
pread
/pwrite
.Aussi parce que vous n'avez pas besoin d'appeler
lseek
pour modifier la position courante dans le fichierpread
/pwrite
éviter d'éventuelles conditions de course lorsque plusieurs threads sont impliqués.OriginalL'auteur Selim Ekizoglu