Linux系统编程08-lseek.md

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
  • 参数:

    • fd: 文件描述符,通过open得到,用来操作某个文件

    • offset: 偏移量

    • whence: 指定的标记

      • SEEK_SET 设置文件指针的偏移量
      • SEEK_CUR 设置偏移量,当前位置+第二个参数offset的值
      • SEEK_END 设置偏移量,文件大小+第二个参数offset的值
  • 返回值:返回文件指针的位置

  • 作用:

    • 移动文件指针到文件头 lseek(fd, 0, SEEK_SET);

    • 当前文件指针的位置 lseek(fd, 0, SEEK_CUR);

    • 获取文件长度 lseek(fd, 0, SEEK_END);

    • 拓展文件长度,当前文件10b -> 110b,增加了100个字节 lseek(fd,100,SEEK_END);
      需要写一次数据

实例:拓展文件的长度

lseek.c

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

int main(int argc, char const *argv[])
{
    int fd = open("hello.txt", O_RDWR);
    if (fd == -1)
    {
        perror("open err");
        return -1;
    }
    //拓展文件长度
    int ret = lseek(fd, 100, SEEK_END);
    if (ret == -1)
    {
        perror("lseek err");
        return -1;
    }
    //写入空数据, 实现拓展
    write(fd, " ", 1);
    //关闭文件
    close(fd);

    return 0;
}

posted @ 2022-10-14 22:05  言叶以上  阅读(16)  评论(0编辑  收藏  举报