3.6|3.6 lseek函数-文件读写定位

lseek函数用来设置当前文件偏移量(current file offset)。通俗说就是接下来对文件的读操作或者写操作,从什么位置开始。函数原型如下:

#include off_t lseek (int filedes, off_t offset, int whence);


返回值:若成功则返回新的文件偏移量,若出错则返回-1。
参数:
1、filedes是 文件标识符,通过open函数从内核获得的一个文件标识符。
2、offset 是相对于whence的偏移量。
3、whence是offset的参照点。
参数2和参数3共同决定文件的读写偏移量。意思是从相对于whence处offset的地方开始读或者写。
【3.6|3.6 lseek函数-文件读写定位】whence有三个常量值可选:
SEEK_SET文件开始处
SEEK_CUR当前位置
SEEK_END文件结束处
说明:

数据类型off_t实际上是long int 型的重定义,在文件中定义。
参数offset可为正也可为负。正数表示向文件尾部方向偏移,负数表示向文件头部方向偏移。


实例 x.3.6.1.c

#include #include int main(void) { charpathname[] = "/tmp/myfile"; intfileid; off_tf_offset; fileid = open(pathname, O_RDWR | O_CREAT); if (fileid < 0 ) { printf("open error for %s\n", pathname); return 1; }f_offset = lseek(fileid, 3, SEEK_SET); /*相对于文件开始处*/ if (f_offset == -1){ printf("lseek error for %s\n", pathname); } else { printf("current file offset is %d\n", f_offset); }f_offset = lseek(fileid, -3, SEEK_END); /*相对于文件结束处*/ if (f_offset == -1){ printf("lseek error for %s\n", pathname); } else { printf("current file offset is %d\n", f_offset); }close(fileid); return 0; }


编译与执行:
[root@localhost unixc]# echo "0123456789" >/tmp/myfile
[root@localhost unixc]# cc x.3.6.1.c
[root@localhost unixc]# ./a.out
current file offset is 3
current file offset is 8
[root@localhost unixc]#

lseek成功的话,都是返回从文件开始出计算的绝对字节数。

    推荐阅读