Linux 系统 IO之 lseek 函数

Linux 系统 IO之 lseek 函数



1. lseek 函数

1.1 头文件包含

// 因为形参包含 off_t 类型,所以要包含 types.h
#include <sys/types.h>
#include <unistd.h>

1.2 函数原型

// off_t 用于文件大小和偏移量
// 在我的 Ubuntu 64 位系统中,本质位 long int
off_t lseek(int fd, off_t offset, int whence);

1.3 函数功能

  • lseek 主要用来重新定位被打开文件的位移量
    根据其特性,还可以实现如下两个功能:
  • 获取文件的大小
  • 对文件进行向后扩展(文件件位置标记向后偏移 N 个字节,并且需要在 N+1 位置写如一个数据)

1.4 函数返回值

  • 返回值为正数 N:表示当前文件位置标记移动 N 字节
  • 返回值为复数N: 表述当前文件位置标记移动 N 字节

1.5 形参解释

  • int fd:文件描述符
  • off_t offset:与 whence 组合使用
  • int whence
    • SEEK_SET: 将文件位置标记设置为从头部偏移 offset 字节 位置
    • SEEK_CUR:将文件位置标记设置为从当前位置偏移 offset 字节 位置
    • SEEK_END:将文件位置标记设置为从尾部偏移 offset 字节 位置

2. 案例程序

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int fd = open("annNote", O_RDWR);
    if( -1 == fd){
        perror("open file");
        exit(1);
    }   

    //参数  文件描述符 偏移量 位置
    // 获取文件长度
    int ret = lseek(fd, 0, SEEK_END);
    printf("file length = %d\n", ret);

    // 文件拓展(把文件变成更大的文件) 只能向后拓展
    ret = lseek(fd, 100, SEEK_END);
    printf("return value %d\n", ret);
    // 为实现文件拓展需额外操作在文件尾部任意写如一个字符
    write(fd, "#", 1);                                                                                                                                         


    close(fd);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值