Provided by: manpages-de-dev_2.5-1_all 

BEZEICHNUNG
lseek - den Datei-Offset für lesen/schreiben verändern
ÜBERSICHT
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
BESCHREIBUNG
lseek() setzt den Offset der mit dem Dateideskriptor fd verbundenen offenen Dateideskription gemäß der
whence-Anweisung auf das Argument offset wie folgt:
SEEK_SET
Der Datei-Offset wird auf offset byte gesetzt.
SEEK_CUR
Der Datei-Offset wird auf die aktuelle Position plus offset byte gesetzt.
SEEK_END
Der Datei-Offset wird auf die Dateigröße plus offset byte gesetzt.
lseek() erlaubt es, den Offset einer Datei hinter ihr Dateiende zu setzen. (Das ändert aber nicht die
Größe der Datei.) Wenn dort später Daten geschrieben werden, geben Lesezugriffe auf die Lücke zwischen
der eigentlichen Datei und den neuen Daten solange Null-Bytes (»\0«) zurück, bis tatsächlich Daten in die
Lücke geschrieben werden.
Suchen von Daten und Lücken in der Datei
Seit Version 3.1 unterstützt Linux die folgenden zusätzlichen Werte für whence:
SEEK_DATA
Einstellen des Datei-Offsets auf die nächste Position in der Datei größer oder gleich offset, die
Daten enthält. Falls offset auf Daten zeigt, wird der Datei-Offset aufoffset gesetzt.
SEEK_HOLE
Einstellen des Datei-Offsets auf die nächste Lücke in der Datei größer oder gleich als offset.
Falls offset in ein Loch zeigt, wird der Datei-Offset auf offset gesetzt. Falls es hinter offset
keine Lücke gibt, wird der Datei-Offset auf das Dateiende eingestellt (d. h., am Ende jeder Datei
gibt es ein implizites Loch).
In beiden der obigen Fälle schlägt lseek() fehl, wenn offset hinter das Dateiende weist.
Diese Operationen ermöglichen Anwendungen, Löcher in einer Datei mit verstreut zugewiesenem Speicherplatz
(sparsely allocated file) abzubilden. Dies kann nützlich sein für Anwendungen wie Werkzeuge für
Datei-Backups, die beim Erstellen von Backups Platz sparen und Löcher erhalten können, wenn sie über
einen Mechanismus für die Erkennung von Löchern verfügen.
Für die Zwecke dieser Operationen ist ein Loch eine Sequenz von Nullen, die (in der Regel) nicht in dem
zugrunde liegenden Dateispeicher zugeordnet sind. Jedoch ist ein Dateisystem nicht verpflichtet Löcher zu
berichten, sodass diese Operationen kein sicherer Mechanismus zum Abbilden des tatsächlich einer Datei
zugeordneten Speicherplatzes sind. (Darüber hinaus wird eine Reihe von Nullen, die tatsächlich an den
zugrunde liegenden Speicher geschrieben wurde, nicht als ein Loch gemeldet werden.) In der einfachsten
Implementierung kann ein Dateisystem die Operationen unterstützen, indem SEEK_HOLE immer den Offset des
Dateiendes und SEEK_DATA immer den offset zurück geben (d.h. selbst wenn offset auf ein Loch weist, kann
dieses Loch als eine Datensequenz angesehen werden, die aus Nullen besteht).
Das Featuretest-Makro _GNU_SOURCE muss definiert sein, um die Definitionen von SEEK_DATA und SEEK_HOLE
von <unistd.h> beziehen zu können.
Die Operationen SEEK_HOLE und SEEK_DATA werden von den folgenden Dateisystemen unterstützt:
* Btrfs (seit Linux 3.1)
* OCFS (seit Linux 3.2)
* XFS (seit Linux 3.5)
* Ext4 (seit Linux 3.8)
* tmpfs(5) (seit Linux 3.8)
* NFS (seit Linux 3.18)
* FUSE (seit Linux 4.5)
RÜCKGABEWERT
Nach erfolgreicher Ausführung gibt lseek() die neue Position in der Datei zurück, gemessen in Bytes vom
Anfang der Datei. Anderenfalls wird der Wert (off_t) -1 zurückgegeben und errno gesetzt, um den den
Fehler anzuzeigen.
FEHLER
EBADF fd ist kein Deskriptor für eine geöffnete Datei.
EINVAL whence ist ungültig. Oder: der resultierende Datei-Offset wäre negativ oder hinter dem Ende eines
durchsuchbaren Geräts.
ENXIO whence ist SEEK_DATA oder SEEK_HOLE und der Datei-Offset ist hinter dem Dateiende.
EOVERFLOW
Der resultierende Datei-Offset kann nicht in einem off_t dargestellt werden.
ESPIPE fd beschreibt eine Pipe, einen Socket oder ein FIFO.
KONFORM ZU
POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.
SEEK_DATA und SEEK_HOLE sind nicht standardisierte Erweiterungen, die auch in Solaris, FreeBSD und
DragonFly BSD vorkommen; sie sind zur Aufnahme in die nächste POSIX-Revision (Ausgabe 8) vorgeschlagen.
ANMERKUNGEN
In open(2) finden Sie Erläuterungen zu den Beziehungen zwischen Dateideskriptoren, offenen
Dateideskriptionen und Dateien.
Falls der Dateistatusschalter O_APPEND auf der offenen Datei-Deskription gesetzt ist, verschiebt ein
write(2) unabhängig von der Verwendung von lseek() immer den Dateiversatz an das Ende der Datei.
Der Datentyp off_t ist ein durch POSIX.1 spezifizierter vorzeichenbehafteter Ganzzahldatentyp.
Manche Geräte unterstützen kein Suchen und POSIX legt nicht fest, welche Geräte lseek() unterstützen
müssen.
Unter Linux schlägt die Verwendung von lseek() auf einem Terminal-Gerät mit dem Fehler ESPIPE fehl.
SIEHE AUCH
dup(2), fallocate(2), fork(2), open(2), fseek(3), lseek64(3), posix_fallocate(3)
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.15 des Projekts Linux-man-pages. Eine Beschreibung des
Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
sich unter https://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Peter Gerbrandt <pgerbrandt@bfs.de>, Martin
Eberhard Schauer <Martin.E.Schauer@gmx.de>, Mario Blättermann <mario.blaettermann@gmail.com> und Helge
Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an
<debian-l10n-german@lists.debian.org>.
Linux 15. September 2017 LSEEK(2)