Provided by: manpages-de-dev_4.13-4_all bug

BEZEICHNUNG

       lseek - den Dateiversatz für lesen/schreiben verändern

ÜBERSICHT

       #include <sys/types.h>
       #include <unistd.h>

       off_t lseek(int dd, off_t Versatz, int dorthin);

BESCHREIBUNG

       lseek()  setzt  den Versatz der mit dem Dateideskriptor dd verbundenen offenen Dateideskription gemäß der
       dorthin-Anweisung auf das Argument Versatz wie folgt:

       SEEK_SET
              Der Datei-Versatz wird auf Versatz byte gesetzt.

       SEEK_CUR
              Der Datei-Versatz wird auf die aktuelle Position plus Versatz byte gesetzt.

       SEEK_END
              Der Datei-Versatz wird auf die Dateigröße plus Versatz byte gesetzt.

       lseek() erlaubt es, den Versatz 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 dorthin:

       SEEK_DATA
              Einstellen des Dateiversatzes auf die nächste Position in der Datei größer  oder  gleich  Versatz,
              die Daten enthält. Falls Versatz auf Daten zeigt, wird der Datei-Versatz auf Versatz gesetzt.

       SEEK_HOLE
              Einstellen  des  Dateiversatzes auf die nächste Lücke in der Datei größer oder gleich als Versatz.
              Falls Versatz in ein Loch zeigt, wird der Datei-Versatz  auf  Versatz  gesetzt.  Falls  es  hinter
              Versatz  keine  Lücke  gibt,  wird der Datei-Versatz 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 Versatz 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 Versatz  des
       Dateiendes  und  SEEK_DATA  immer  den Versatz zurück geben (d.h. selbst wenn Versatz 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)

       *  GFS2 (seit Linux 4.15)

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  dd ist kein Deskriptor für eine geöffnete Datei.

       EINVAL dorthin  ist  ungültig.  Oder:  der  resultierende Datei-Versatz wäre negativ oder hinter dem Ende
              eines durchsuchbaren Geräts.

       ENXIO  dorthin ist SEEK_DATA oder SEEK_HOLE und  Versatz  ist  hinter  dem  Dateiende  oder  dorthin  ist
              SEEK_DATA und Versatz ist in einem Loch am Dateiende.

       EOVERFLOW
              Der resultierende Datei-Versatz kann nicht in einem off_t dargestellt werden.

       ESPIPE dd 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.10  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 die
       Mailingliste der Übersetzer.

Linux                                            13. August 2020                                        LSEEK(2)