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成功的话,都是返回从文件开始出计算的绝对字节数。
推荐阅读
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 概率论/统计学|随机变量 的 分布函数 与 概率密度函数 的区别
- vue组件中为何data必须是一个函数()
- iOS-Swift-map|iOS-Swift-map filter reduce、函数式编程
- win10环境|win10环境 python3.6安装pycrypto-2.6.1的问题
- R语言|R语言 函数
- 2018-05-30闭包和函数