lseek

LSEEK(2)                    Linux-Programmierhandbuch                   LSEEK(2)



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 5.03 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                             6. März 2019                          LSEEK(2)