3.6 lseek函数-文件读写定位

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

#include <unistd.h>
off_t lseek (int filedes, off_t offset, int whence);

返回值:若成功则返回新的文件偏移量,若出错则返回-1。

参数:

1、filedes是 文件标识符,通过open函数从内核获得的一个文件标识符。

2、offset 是相对于whence的偏移量。

3、whenceoffset的参照点。

参数2和参数3共同决定文件的读写偏移量。意思是从相对于whenceoffset的地方开始读或者写。

whence有三个常量值可选:

SEEK_SET     文件开始处

SEEK_CUR    当前位置

SEEK_END    文件结束处

说明:

数据类型off_t实际上是long int 型的重定义,在<types.h>文件中定义。

参数offset可为正也可为负。正数表示向文件尾部方向偏移,负数表示向文件头部方向偏移。


实例 x.3.6.1.c

#include <fcntl.h>
#include <stdio.h>

int main(void)
{
    char     pathname[] = "/tmp/myfile";
    int      fileid;
    off_t    f_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成功的话,都是返回从文件开始出计算的绝对字节数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值