ich eine große Datei lese pread
wie folgt verwendet:pread für sehr große Dateien
ssize_t s = pread(fd, buff, count, offset);
if (s != (ssize_t) count)
fprintf(stderr, "s = %ld != count = %ld\n", s, count);
assert(s == (ssize_t) count);
Der obige Code ist für kleine Dateien (bis zu 1,5 GB) fein gearbeitet. Bei großen Dateigrößen weicht die zurückgegebene Anzahl der Bytes jedoch von der erwarteten Anzahl ab.
Insbesondere für 2,4 GB Dateigröße, meine count
wird auf 2520133890 und die Behauptung nicht mit den fprintf
sagen:
s = 2147479552 != count = 2520133890
Was diese rätselhaft macht, ist, dass ich auf einem 64- arbeiten Bit-System und daher sizeof(ssize_t) = 8
.
Was ist die Ursache für diesen Fehler und wie behebe ich dies, damit ich die gesamte Datei auf einmal lesen kann?
Was ist mit "Offset"? Sind Sie sicher, dass es Null enthält? –
Welche Art von 'count' und' offset'? Verwenden Sie die richtige Version von 'pread' aus' libc', zum Beispiel unter Linux gibt es 'pread' und' pread64', und Sie müssen sicher sein, dass Sie 'pread64' Funktion von' glibc' verwenden? – fghj
@GiuseppeGuerrini Offset ist immer auf 0 gesetzt. –