sourCEntral - mobile manpages

pdf

LSEEK

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).

The _GNU_SOURCE feature test macro must be defined in order to obtain the definitions of SEEK_DATA and SEEK_HOLE from <unistd.h>.

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

SVr4, 4.3BSD, POSIX.1−2001.

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

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:

img

Note that file descriptors created by dup(2) or fork(2) share the current file position pointer, so seeking on such files may be subject to race conditions.

SIEHE AUCH

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

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 3.52 des Projekts Linux−man−pages. Eine Beschreibung des Projekts und Informationen, wie Fehler gemeldet werden können, finden sich unter http://www.kernel.org/doc/man−pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Peter Gerbrandt <pgerbrandt AT bfs DOT de> und Martin Eberhard Schauer <Martin DOT E DOT Schauer AT gmx DOT 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 AT lists DOT debian DOT org>.

pdf