Provided by: manpages-fr-dev_4.13-4_all 

NOM
lseek - Positionner la tête de lecture/écriture dans un fichier
SYNOPSIS
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
DESCRIPTION
lseek() replace la description du fichier ouvert associée au descripteur de fichier fd au paramètre
offset en suivant la directive whence ainsi :
SEEK_SET
La tête est placée à offset octets.
SEEK_CUR
La tête est placée à son emplacement actuel plus offset octets.
SEEK_END
La tête est placée à la taille du fichier plus offset octets.
lseek() permet de placer la tête au-delà de la fin du fichier (mais cela ne modifie pas la taille du
fichier). Si des données sont écrites à cet emplacement, une lecture ultérieure de l'espace intermédiaire
(un « trou ») retournera des octets NULL (« \0 ») jusqu'à ce que d'autres données y soient écrites.
Recherche de données et de trous de fichier
Depuis la version 3.1, Linux accepte de plus les valeurs suivantes de whence :
SEEK_DATA
Positionner la tête sur le prochain (supérieur ou égal à offset) emplacement du fichier contenant
des données. Si offset pointe sur des données, la tête est placée sur offset.
SEEK_HOLE
Positionner la tête sur le prochain (supérieur ou égal à offset) trou du fichier. Si offset pointe
au milieu d'un trou, la tête est placée sur offset. S'il n'y a pas de trou après offset, la tête
est positionnée à la fin du fichier (c'est-à-dire qu'il y a un trou implicite à la fin de tous les
fichiers).
Dans les deux cas précédents, lseek() échoue si offset pointe après la fin du fichier.
Ces opérations permettent aux applications d'établir une projection des trous dans un fichier fractionné.
Cela peut servir aux applications du type outils de sauvegarde, qui peuvent économiser de l'espace lors
de la création de sauvegardes et conserver les trous, si elles disposent d'un mécanisme permettant de
trouver les trous.
Pour ces opérations, un trou est une suite de zéros qui n'a (normalement) pas été allouée au stockage
sous-jacent du fichier. Cependant, un système de fichiers n'est pas forcé de signaler les trous, donc ces
opérations ne permettent pas de garantir la projection de l'espace de stockage vraiment alloué à un
fichier (de plus, une suite de zéros vraiment écrite sur le stockage sous-jacent pourrait ne pas être
signalée comme un trou). La plus simple implémentation de ses opérations pour un système de fichiers,
serait avec SEEK_HOLE renvoyant toujours la position de fin de fichier, et SEEK_DATA renvoyant toujours
offset (c'est-à-dire, même si offset pointe à l'emplacement d'un trou, la suite de zéros peut être
considérée comme des données).
La macro de test de fonctionnalités _GNU_SOURCE doit être définie pour accéder aux définitions de
SEEK_DATA et SEEK_HOLE depuis <unistd.h>.
Les opérations SEEK_HOLE et SEEK_DATA sont prises en charge avec les systèmes de fichiers suivants :
– Btrfs (depuis Linux 3.1)
– OCFS (depuis Linux 3.2)
– XFS (depuis Linux 3.5)
– ext4 (depuis Linux 3.8)
– tmpfs(5) (depuis Linux 3.8)
– NFS (depuis Linux 3.18)
– FUSE (depuis Linux 4.5)
– GFS2 (depuis Linux 4.15)
VALEUR RENVOYÉE
lseek(), si elle réussit, renvoie le nouvel emplacement, mesuré en octets depuis le début du fichier. En
cas d'échec, la valeur (off_t) -1 est renvoyée, et errno contient le code d'erreur.
ERREURS
EBADF fd n'est pas un descripteur de fichier ouvert.
EINVAL Soit whence n'est pas valable, soit la position demandée serait négative, ou après la fin d'un
périphérique.
ENXIO whence vaut SEEK_DATA ou SEEK_HOLE, et offset est après la fin du fichier, ou whence vaut
SEEK_DATA et offset est dans un trou à la fin du fichier.
EOVERFLOW
La position résultante dans le fichier ne peut être représentée dans un off_t.
ESPIPE fd est associé à un tube (pipe), un socket ou une file FIFO.
CONFORMITÉ
POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.
SEEK_DATA et SEEK_HOLE sont des extensions non normalisées existant aussi sous Solaris, FreeBSD et
DragonFly BSD. Leur intégration est proposée pour la prochaine révision de POSIX (Issue 8).
NOTES
Consultez open(2) pour en savoir plus sur la relation entre les descripteurs de fichiers, les
descriptions de fichiers ouverts et les fichiers.
Si l'attribut d'état du fichier O_APPEND est positionné sur la description du fichier ouvert, une
opération write(2) déplace toujours la position dans le fichier à la fin du fichier, indépendamment de
l'utilisation de lseek().
Le type de données off_t est un type de données entier signé spécifié par POSIX.1.
Certains périphériques ne permettent pas de positionnement direct, POSIX ne précise quels périphériques
doivent gérer lseek().
Sous Linux, l'utilisation de lseek() sur un périphérique terminal échoue avec l'erreur ESPIPE.
VOIR AUSSI
dup(2), fallocate(2), fork(2), open(2), fseek(3), lseek64(3), posix_fallocate(3)
COLOPHON
Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des
instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à
l'adresse https://www.kernel.org/doc/man-pages/.
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess
<https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud
<tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard
<fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau
<jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François
<nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard
<simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot
<david@tilapin.org>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Philippe MENGUAL
<jpmengual@debian.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License
version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à
debian-l10n-french@lists.debian.org.
Linux 13 août 2020 LSEEK(2)