Definition | #include <stdio.h> off__t lseek(int dk, off_t distanz, int ort);
Für die Bearbeitung von Dateien > 2 GB verfahren Sie wie folgt:
Es besteht kein funktionaler Unterschied zwischen Textdateien (SAM, ISAM) lassen sich absolut auf Dateianfang und -ende positionieren sowie auf eine vorher mit Binärdateien (PAM, INCORE) lassen sich sowohl absolut positionieren (s.o.) als auch relativ um eine gewünschte Anzahl Bytes, bezogen auf Dateianfang, Dateiende oder aktuelle Position. SAM-Dateien werden mit elementaren Funktionen als Textdateien verarbeitet, außer wenn bei | |||||||||||||||||||||||||||||||||||||||||||||||
Parameter | int dk Dateikennzahl der Datei, deren Lese-/Schreibzeiger positioniert werden soll. off_t / off64_t distanz, int ort Bedeutung, Kombinationsmöglichkeiten und Wirkung dieser Parameter sind für Text- und Binärdateien unterschiedlich und werden deshalb im Folgenden getrennt beschrieben. Textdateien (SAM, ISAM)Mögliche Werte der Parameter:
Sinnvolle Kombinationsmöglichkeiten und Wirkung:
Binärdateien (PAM, INCORE)Mögliche Werte der Parameter:
Sinnvolle Kombinationsmöglichkeiten und Wirkung:
| |||||||||||||||||||||||||||||||||||||||||||||||
Returnwert | Position in der Datei bei Erfolg, und zwar | |||||||||||||||||||||||||||||||||||||||||||||||
bei Binärdateien die Anzahl Bytes, die der Lese-/Schreibzeiger vom Dateianfang entfernt ist, | ||||||||||||||||||||||||||||||||||||||||||||||||
-1 | im Fehlerfall. Zusätzlich wird in | |||||||||||||||||||||||||||||||||||||||||||||||
Hinweise | Die Aufrufe Werden in eine Textdatei neue Sätze geschrieben (geöffnet zum Neuerstellen oder Anhängen) und erfolgt ein Wenn Sie bei einer zum Schreiben geöffneten Binärdatei hinter das Dateiende positionieren, entsteht ein „Loch“ zwischen den letzten physisch gespeicherten Daten und den neu geschriebenen Daten. Lesen aus diesem „Loch“ liefert binäre Nullen. Wenn Sie bei einer nur zum Lesen geöffneten Binärdatei hinter das Dateiende positionieren, führt das zu einem Fehler (EMDS). Auf Systemdateien (SYSDTA, SYSLST, SYSOUT) kann nicht positioniert werden. Da die Informationen über die Dateiposition in einem Feld zusammengefasst werden, ergeben sich für die Größe von SAM- und ISAM-Dateien folgende Einschränkungen: SAM-Datei
ISAM-Datei
| |||||||||||||||||||||||||||||||||||||||||||||||
Satz-E/A |
Bei Aufrufen mit anderen Argumenten liefern l | |||||||||||||||||||||||||||||||||||||||||||||||
Beispiel | Folgendes Programm liest ab Position 10 aus der Datei, die als erstes Argument beim Aufruf übergeben wird, fügt den Inhalt ans Ende der Datei an, falls ein zweites Argument #include <stdio.h> #include <stdlib> int fd1, fd2; long result; char c; int main(int argc, char *argv[]) { if((fd1 = open (argv[1],0)) < 0) exit(1); if(argc < 3) fd2 = 1; else fd2 = open(argv[2], 1); result = lseek(fd1, 10L, SEEK_SET); printf("aktuelle Position in Datei1 : %ld\n", tell(fd1)); /* Weitere mögliche Positionsabfragen: printf("aktuelle Position in Datei1: %ld\n, result); printf("aktuelle Position in Datei1: %ld\n, lseek(fd1, 0L, SEEK_CUR)); */ while(read(fd1, &c, 1) > 0) write(fd2, &c, 1); close(fd1); close(fd2); return 0; } | |||||||||||||||||||||||||||||||||||||||||||||||
Siehe auch | tell, fseek, fseek64, ftell, ftell64 |