NOMBRE¶
lseek - reposiciona el puntero de lectura/escritura de un fichero
SINOPSIS¶
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fildes, off_t offset, int
whence);
DESCRIPCIÓN¶
La función
lseek reposiciona el puntero del descriptor de fichero
fildes con el argumento
offset de acuerdo con la directiva
whence as follows:
- SEEK_SET
- El puntero se coloca a offset bytes.
- SEEK_CUR
- El número de bytes indicado en offset se suma a la
dirección actual y el puntero se coloca en la dirección
resultante.
- SEEK_END
- El puntero se coloca al final del fichero más offset
bytes.
La función
lseek permite colocar el puntero de fichero
después del final de fichero. Si después se escriben datos en
este punto, las lecturas siguientes de datos dentro del hueco que se forma
devuelven ceros (hasta que realmente se escriban datos dentro de ese hueco).
VALOR DEVUELTO¶
En el caso de una ejecución correcta,
lseek devuelve la
posición del puntero resultante medida en bytes desde el principio del
fichero. Si se produce un error, se devuelve el valor (off_t)-1 y en
errno se coloca el tipo de error.
ERRORES¶
- EBADF
- fildes no es un descriptor de fichero abierto.
- ESPIPE
- fildes está asociado a una tubería, socket, o
FIFO.
- EINVAL
- whence no es un valor adecuado.
SVr4, POSIX, BSD 4.3
RESTRICCIONES¶
Algunos dispositivos son incapaces de buscar y POSIX no especifica qué
dispositivos deben soportar la búsqueda.
Restricciones específicas de Linux: el uso de
lseek sobre un
dispositivo tty (terminal) devuelve
ESPIPE. Otros sistemas devuelven el
número de caracteres escritos, usando SEEK_SET para establecer el
contador. Algunos dispositivos, como por ejemplo
/dev/null, no provocan
el error
ESPIPE, pero devuelven un puntero cuyo valor es indefinido.
OBSERVACIONES¶
La utilización de
whence en este documento es incorrecta en
inglés, pero se usa por motivos históricos. Cuando convierta
código antiguo, sustituya los valores para
whence con las
siguientes macros:
antiguo |
nuevo |
0 |
SEEK_SET |
1 |
SEEK_CUR |
2 |
SEEK_END |
L_SET |
SEEK_SET |
L_INCR |
SEEK_CUR |
L_XTND |
SEEK_END |
SVR1-3 devuelve
long en lugar de
off_t, BSD devuelve
int.
Observe que los descriptores de fichero creados con
dup(2) o
fork(2) comparten el puntero actual de fichero, por lo que
reposicionarse sobre tales ficheros puede estar sujeto a condiciones de
carrera.
VÉASE TAMBIÉN¶
dup(2),
fork(2),
open(2),
fseek(3)