lseek()函数 Unix/Linux
内容简介
#include <sys/types.h>#include <unistd.h>
off_t lseek(int fildes, off_t offset, int whence);
描述
The lseek() function repositions the offset of the open file associated with the file descriptor fildes to the argument offset according to the directive whence as follows:标签 | 描述 |
---|---|
SEEK_SET | |
The offset is set to offset bytes. | |
SEEK_CUR | |
The offset is set to its current location plus offset bytes. | |
SEEK_END | |
The offset is set to the size of the file plus offset bytes. |
返回值
Upon successful completion, lseek() returns the resulting offset location as measured in bytes from the beginning of the file. Otherwise, a value of (off_t)-1 is returned and errnois set to indicate the error.错误
标签 | 描述 |
---|---|
EBADF | fildes is not an open file descriptor. |
EINVAL | whence is not one of SEEK_SET, SEEK_CUR, SEEK_END; or the resulting file offset would be negative, or beyond the end of a seekable device. |
EOVERFLOW | |
The resulting file offset cannot be represented in an off_t. | |
ESPIPE | fildes is associated with a pipe, socket, or FIFO. |
遵循于
SVr4, 4.3BSD, POSIX.1-2001.RESTRICTIONS
Some devices are incapable of seeking and POSIX does not specify which devices must support lseek().Linux specific restrictions: using lseek() on a tty device returns ESPIPE.
注意
本文档的使用那里的是英文不正确,但维持历史原因。当与下面的宏转换旧的代码,用于何处替换值:
old | new |
0 | SEEK_SET |
1 | SEEK_CUR |
2 | SEEK_END |
L_SET | SEEK_SET |
L_INCR | SEEK_CUR |
L_XTND | SEEK_END |
SVr1-3 returns long instead of off_t, BSD returns int.
Note that file descriptors created by dup(2) or fork(2) share the current file position yiibaier, so seeking on such files may be subject to race conditions.