Provided by: manpages-de-dev_1.11-1_all bug

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

       Die  Funktion  lseek() setzt den Offset der mit dem Dateideskriptor fd verbundenen offenen
       Datei auf offset gemäß der whence-Anweisung wie folgt:

       SEEK_SET
              Der Offset wird auf offset Byte gesetzt.

       SEEK_CUR
              Der Offset wird auf die aktuelle Position plus offset Byte gesetzt.

       SEEK_END
              Der Offset wird auf die Dateigröße plus offset Byte gesetzt.

       Die Funktion 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 (seit Linux 3.8)

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.

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

       ESPIPE fd beschreibt eine Pipe, einen Socket oder ein FIFO.

       ENXIO  whence ist SEEK_DATA oder SEEK_HOLE und der aktuelle Datei-Offset  ist  hinter  dem
              Dateiende.

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
       Dateideskriptoren und Dateien.

       Manche Geräte unterstützen kein Suchen und POSIX legt nicht fest,  welche  Geräte  lseek()
       unterstützen müssen.

       Unter Linux gibt die Verwendung von lseek() auf einem Terminal-Gerät ESPIPE zurück.

       Wenn  alter  Code  konvertiert wird, ersetzen Sie die Werte von whence durch die folgenden
       Makros:

        alt       neu
       0        SEEK_SET
       1        SEEK_CUR
       2        SEEK_END
       L_SET    SEEK_SET
       L_INCR   SEEK_CUR
       L_XTND   SEEK_END

       Beachten Sie, dass von dup(2) oder fork(2) erzeugte Dateideskriptoren den gleichen  Zeiger
       für  die  aktuelle  Dateiposition  gemeinsam  nutzen,  so  dass Suchoperationen in solchen
       Dateien Wettlaufbedingungen (race conditions) unterliegen können.

SIEHE AUCH

       dup(2), fork(2), open(2), fseek(3), lseek64(3), posix_fallocate(3)

KOLOPHON

       Diese Seite  ist  Teil  der  Veröffentlichung  4.04  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 http://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>.