lseek(2)

NAAM
lseek - herplaats lees/schrijf bestand-positie

BIBLIOTHEEK
Standaard C bibliotheek (libc, -lc)

SAMENVATTING
#include <unistd.h>

off_t lseek(int bi, off_t positie, int vanaf);

BESCHRIJVING
De lseek() functie herplaatst de positie van de bestandindicator bi naar het argument positie volgens de aanwijzing vanaf als volgt:

SEEK_SET
    De positie wordt naar positie bytes gezet.

SEEK_CUR
    De positie wordt naar de huidige plaats plus positie bytes gezet.

SEEK_END
    De positie wordt naar de lengte van het bestand plus positie bytes gezet.

De lseek() functie staat toe de bestand positie te zetten ná het einde van het bestand (dit verandert de grootte van het bestand niet). Als later gegevens op deze positie worden geschreven, geven navolgende lees opdrachten in het gat Nul-bytes '\0') terug, totdat er daadwerkelijk gegevens in het gat worden geschreven.

  Zoeken bestand data en gaten
Vanaf Linux 3.1 ondersteund Linux de volgende additionele waarden voor vanaf:

SEEK_DATA
    Pas de bestandsplaats aan de volgende locatie in het bestand groter dan of gelijk aan positie die data bevat. Als positie naar data wijst, zet dan de bestandsplaats op positie.

SEEK_HOLE
    Pas de bestandsplaats aan naar het volgende gat in het bestand groter dan of gelijk aan positie. Als positie naar het midden van een gat wijst, dan wordt de plaats gezet op positie gezet. Als er geen gat is voorbij positie, dan wordt de plaats gezet op het einde van het bestand (m.a.w. er is een impliciet gat aan het einde van elk bestand).

In beide bovenstaande gevallen faalt lseek() als positie voorbij het einde van het bestand wijst.

Deze operaties staan applicaties toe om gaten in dun toegekende bestanden in kaart te brengen. Dit kan nuttig zijn voor applicaties zoals backup gereedschap, die ruimte kunnen sparen bij het aanmaken van backups en gaten kunnen bewaren, mits ze een mechanisme hebben om gaten de ontdekken.

Binnen de doelen van deze operaties bedoelen we met een gat een serie van nullen die (normaliter) niet zijn toegekend in de onderliggende bestandsopslag. Het is echter zo dat een bestandssysteem niet verplicht is gaten te rapporteren, daarom zijn deze operaties geen gegarandeerd mechanisme om de aan een bestand toegekende opslag ruimte in kaart te brengen. (Bovendien hoeft een serie van nullen die daadwerkelijk is geschreven naar de onderliggende opslag niet gerapporteerd te worden als een gat.) In de meest eenvoudige implementatie kan een bestandssysteem de operatie ondersteunen door te zorgen dat SEEK_HOLE altijd de afstand naar het einde van het bestand teruggeeft, en te zorgen dat SEEK_DATA altijd positie teruggeeft (m.a.w. zelfs als de locatie aangewezen door positie een gat is, kan het beschouwd worden te bestaan uit data die een serie van nullen is).

De _GNU_SOURCE test macro moet zijn gedefinieerd om de definities te verkrijgen van SEEK_DATA en SEEK_HOLE uit <unistd.h>.

De SEEK_HOLE en SEEK_DATA operaties worden ondersteund door de volgende bestandssystemen:

•   Btrfs (sinds Linux 3.1)

•   OCFS (sinds Linux 3.2)

•   XFS (sinds Linux 3.5)

•   ext4 (sinds Linux 3.8)

•   tmpfs(5) (sinds Linux 3.8)

•   NFS (sinds Linux 3.18)

•   FUSE (sinds Linux 4.5)

•   GFS2 (sinds Linux 4.15)

EIND WAARDE
Bij geslaagde afronding geeft lseek de opgeleverde plaats zoals gemeten in bytes van het begin van het bestand, terug. Anders wordt een waarde van (off_t) -1 teruggegeven, en errno wordt gezet om de fout duidelijk te maken.

FOUTEN

EBADF
    bi is niet een open bestandindicator..

EINVAL
    Vanaf is niet geldig. Of: de resulterende bestand plaats zou negatief zijn, of voorbij het einde van een doorzoekbaar apparaat.

ENXIO
    whence is SEEK_DATA of SEEK_HOLE, en positie is voorbij het einde van het bestand, of whence is SEEK_DATA en positie is in een gat aan het einde van het bestand.

EOVERFLOW
    De resulterende bestand plaats kan niet gerepresenteerd worden in een off_t.

ESPIPE
    bi hoort bij een pijp, een socket, of een FIFO.

VERSIES
Op Linux: het gebruik van lseek() zal op een terminal apparaat falen met de foutESPIPE.

STANDAARDEN
POSIX.1-2024.

HISTORIE
4.3BSD, SVr4, POSIX.1-1988.

SEEK_DATA
SEEK_HOLE
    Solaris 10, FreeBSD 7.0, DragonFly BSD 2.3.1, POSIX.1-2024.

OPMERKINGEN
Zie open(2) voor een discussie over de relatie tussen bestandsbeschrijvingen, open bestandsbeschrijvingen en bestanden.

Als de O_APPEND bestand status vlag is gezet op de open bestandsbeschrijving, dan zal write(2) altijd de bestandsafstand naar het einde van het bestand verplaatsen, onafhankelijk van het gebruik van lseek().

Sommige apparaten zijn niet in status tot zoeken, en POSIX bepaald nietwelke apparaten het moeten lseek() ondersteunen.

ZIE OOK
dup(2), fallocate(2), fork(2), open(2), fseek(3), lseek64(3), posix_fallocate(3)

VERTALING
De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>

Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-dutch@lists.debian.org.