Linux lseek函数 重新定位文件的位移

  • 头文件

    #include <sys/types.h>
    #include <unistd.h>
    
  • 函数原型

    off_t lseek(int fd, off_t offset, int whence)

    fd:需要重新定问的文件描述符。
    offset:需要移动的长度,为正则向文件末尾移动(向前移),为负数则向文件头部(向后移)。
    whence:

    • SEEK_SET:从文件头部开始偏移offset个字节。
    • SEEK_CUR:从文件当前读写的指针位置开始,增加offset个字节的偏移量。
    • SEEK_END:文件偏移量设置为文件的大小加上偏移量字节。
  • lseek函数详解

    • 对文件进行操作时,该文件是动态文件,动态文件在内存中的形态就是文件流的形式。
    • 在动态文件中,通过文件指针来表征这个正在操作的位置,文件指针是vnode中的一个元素。
    • 该指针不能直接访问,Linux提供lseek函数访问这个文件指针。
    • 打开一个文件时,默认下,文件指针只想文件流的开始,这时候write是从文件开始位置写入的,write与read自带移动文件指针的功能,write写入n字节后,文件指针会自动往后移动n位。
  • 用lseek创建一个空洞文件
    空洞文件就是这个文件有一段是空的,普通文件中间不能有空,write文件时从前往后移动文件指针,依次写入,用lseek往后跳过一段,就形成空洞文件。空洞文件对多线程共同操作文件非常有用。需要创建一个很大文件时,从头开始依次创建时间很长,可以将文件分成多段,多个线程操作每个线程负责其中一段的写入。

发布了78 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/104335619
今日推荐