lseek
Section: System Calls (2)
Updated: 5 février 2023
Index
Return to Main Contents
NOM
lseek - Positionner la tête de lecture/écriture dans un fichier
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#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 Linux 3.1, Linux prend en charge les valeurs supplémentaires
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.
STANDARDS
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)
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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- Recherche de données et de trous de fichier
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- STANDARDS
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 09:19:32 GMT, May 23, 2024