2017-06-03 2 views
1

Ich habe Probleme zu verstehen, warum lseek Funktion ist nützlich. Unter der Annahme, bekam ich einen Parameter wie folgt mir gegeben vom Benutzer:Warum brauchen wir lseek, wenn Pread Offset-Wert akzeptiert?

off_t offset = 10; 

Und ich wollte von dem Offset 100 Bytes lesen. ich pread wie diese verwenden:

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

Auf der anderen Seite verstehe ich, dass ich die Datei mit lseek wie folgt einstellen:

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

So glaube ich, dass ich mit pread bereits achieve lesen. Was habe ich vermisst in Bezug auf lseek, was es tun kann, um mir zu helfen, die Datei zu lesen?

+3

Weder lseek noch pread sind Teil von Standard C++. Oder von Standard C, für diese Angelegenheit. –

+0

Mein schlechtes, wie würdest du es nennen? C? Linux? – Eyzuky

+0

Es sieht eher wie C-Code als C++ aus. Ich habe ein POSIX-Tag hinzugefügt. –

Antwort

1

Eine Funktion muss möglicherweise von/zu einem gegebenen Datei-Handle an einem Ort lesen/schreiben, der ihm nicht bekannt ist (z. B. aktuelle Position), so dass Suchvorgang vom Lesen (oder Schreiben) abgekoppelt werden muss müssen den Standort festlegen.

Generell sind viele I/Os nur sequentiell, so dass Suchen nicht notwendig ist, während pread Kräfte suchen.