2017-06-03 9 views
1

J'ai de la difficulté à comprendre pourquoi la fonction lseek est utile. En supposant que je suis un paramètre comme celui-ci m'a été donnée de l'utilisateur:Pourquoi avons-nous besoin de lseek lorsque Pread accepte la valeur de décalage?

off_t offset = 10; 

Et je voulais lire l'offset 100 octets. Je peux utiliser pread comme ceci:

void * buf = malloc(100); 
if (buf == NULL) { exit(1);} 
int res = pread(file_id, buf, 100, offset); 

D'autre part, je comprends que je peux définir le fichier avec lseek comme ceci:

off_t seek = lseek(file_id, offset, SEEK_SET); 

Je crois que j'ATTEINDRE lecture à l'aide pread déjà. Qu'est-ce que j'ai manqué concernant lseek dans ce qu'il peut faire pour m'aider à lire le fichier?

+3

Ni lseek ni pread ne font partie de la norme C++. Ou de la norme C, d'ailleurs. –

+0

Mon diabolique, que nommez-vous? C? Linux? – Eyzuky

+0

Il ressemble plus à du code C qu'à C++. J'ai ajouté un tag POSIX. –

Répondre

1

Une fonction peut avoir à lire/écrire depuis/vers un descripteur de fichier donné à un emplacement inconnu (disons position actuelle), vous devez donc découpler la recherche de lecture (ou d'écriture) car l'appelant peut avoir besoin de définir l'emplacement. Plus généralement, de nombreuses E/S sont simplement séquentielles, donc la recherche n'est pas nécessaire, tandis que pread force la recherche.