jammy (2) lseek.2.gz

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
       ⟨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⟩.