18.30 File-Deskriptor positionieren – lseek
 
lseek() ist dieselbe Funktion, die bei der höheren Ebene fseek() hieß, und dient zum Verschieben des File-Deskriptors in der geöffneten Datei. Hier die Syntax von lseek():
#inlcude <unistd.h> /* für UNIX */
#include <sys/types.h> /* für UNIX */
#inlcude <io.h> /* für MS-DOS/WIN */
long lseek(int fh, long offset, int wie);
Die Datei, in welcher der File-Deskriptor verschoben werden soll, wird mit dem File-Deskriptor fh angegeben, der natürlich zuvor mit open() geöffnet bzw. erzeugt wurde. Um wie viele Bytes der File-Deskriptor von der Position wie verschoben werden soll, wird mit offset angegeben. Die Angaben von wie sind dieselben wie schon bei fseek(). Hier nochmals die Tabelle, die zeigt, welche Möglichkeiten zur Verfügung stehen:
Tabelle 18.18
Bezugspunkt für die Positionierung (gleich wie bei fseek)
wie-Angabe
|
Beschreibung
|
SEEK_SET oder 0
|
Schreib-/Lese-Deskriptor vom Dateianfang um offset Bytes versetzen
|
SEEK_CUR oder 1
|
Schreib-/Lese-Deskriptor von der aktuellen Position um offset Bytes versetzen
|
SEEK_END oder 2
|
Schreib-/Lese-Deskriptor vom Dateiende um offset Bytes versetzen
|
Als Rückgabewert gibt diese Funktion den Wert der aktuellen Position des File-Deskriptors zurück:
long aktuelle_position;
aktuelle_position = lseek(fh, 0L, SEEK_CUR);
Bei Fehler gibt diese Funktion –1 zurück. lseek() sollte allerdings nicht auf kleiner als 0 geprüft werden, sondern auf –1, da es durchaus sein kann, dass es Gerätedateien gibt, die einen negativen Wert zurückliefern. Weitere Möglichkeiten von lseek():
Deskriptor auf den Dateianfang setzen:
lseek(fh, 0L, SEEK_SET);
Deskriptor um 100 Bytes von der aktuellen Position nach vorne versetzen:
lseek(fh, 100L, SEEK_CUR);
Deskriptor um 10 Bytes von der aktuellen Position zurücksetzen:
lseek(fh, –10L, SEEK_CUR);
Deskriptor auf das letzte Byte setzen (nicht EOF):
lseek(fh, –1L, SEEK_END);
Ein Beispiel zu lseek() kann ich mir sparen, da diese Funktion genauso eingesetzt wird wie fseek(); nur, dass anstatt eines Streams hierbei ein File-Deskriptor verwendet wird.
|