Provided by: manpages-de-dev_4.21.0-2_all bug

BEZEICHNUNG

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

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #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
       Nullbytes (»\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.

STANDARDS

       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)

Ü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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 ⟨debian-l10n-german@lists.debian.org⟩.