lseek

LSEEK(2)                   Manuel du programmeur Linux                  LSEEK(2)



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
       La fonction lseek() place la tête de lecture/écriture à la position
       offset dans le fichier associé au descripteur fd en suivant la directive
       whence ainsi :

       SEEK_SET
              La tête est placée à offset octets depuis le début du fichier.

       SEEK_CUR
              La tête de lecture/écriture est avancée de offset octets.

       SEEK_END
              La tête est placée à la fin du fichier plus offset octets.

       La fonction lseek() permet de placer la tête au‐delà de la fin actuelle
       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 nul (« \0 »)
       jusqu'à ce que d'autres données y soient écrites.

   Recherche de données et trous de fichiers
       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 fichier,
       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 (depuis Linux 3.8)

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.

       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), une socket, ou une file FIFO.

       ENXIO  whence est SEEK_DATA ou SEEK_HOLE, et la position demandée est
              après la fin d'un périphérique.

CONFORMITÉ
       SVr4, BSD 4.3, POSIX.1-2001.

       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.

       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 (tty)
       renvoie ESPIPE.

       Lors de la conversion d'un ancien code, substituez les valeurs de whence
       par les macros suivantes :

       ancien   nouveau
       0        SEEK_SET
       1        SEEK_CUR
       2        SEEK_END

       L_SET    SEEK_SET
       L_INCR   SEEK_CUR
       L_XTND   SEEK_END

       Notez que les descripteurs de fichier dupliqués par dup(2) ou fork(2)
       partagent le même pointeur de position. Ainsi le déplacement sur de tels
       fichiers peut conduire à des problèmes d'accès concurrents.

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

COLOPHON
       Cette page fait partie de la publication 3.70 du projet man-pages Linux.
       Une description du projet et des instructions pour signaler des anomalies
       peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION
       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
       <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone
       au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain
       Portal <http://manpagesfr.free.fr/> (2003-2006).  Julien Cristau et
       l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez signaler toute erreur de traduction en écrivant à
       <perkamon-fr@traduc.org>.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en
       utilisant la commande « LC_ALL=C man <section> <page_de_man> ».



Linux                             13 juin 2014                          LSEEK(2)