table of contents
lseek(2) | System Calls Manual | lseek(2) |
NAAM¶
lseek - herplaats lees/schrijf bestand-positie
BIBLIOTHEEK¶
Standard 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 niet de grootte van het bestand). Als later gegevens op deze positie worden geschreven, geven navolgende lees opdrachten in het gat ge-Nulde ('\0') bytes 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.
VOLDOET AAN¶
POSIX.1-2008.
GESCHIEDENIS¶
POSIX.1-2001, SVr4, 4.3BSD.
SEEK_DATA en SEEK_HOLE zijn niet-standaard uitbreidingen ook aanwezig inSolaris, FreeBSD, en DragonFly BSD; zij zijn voorgesteld voor opname in de volgende POSIX revisie (Issue 8).
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 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.
2 mei 2024 | Linux man-pages (unreleased) |