如何在Linux中使用lseek函数

  介绍

这篇文章给大家介绍如何在Linux中使用lseek函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

lseek函数的作用是用来重新定位文件读写的位移。

<强>头文件以及函数声明

# include  & lt; sys/types.h>   # include  & lt; unistd.h>   off_t  lseek (int  fd, off_t 抵消,,int 那里);

抵消为正则向文件末尾移动(向前移),为负数则向文件头部(向后移)。

<强>描述

lseek()复位的文件偏移量打开文件描述与参数的文件描述符fd抵消根据指令从如下:
SEEK_SET文件偏移量将抵消字节。
SEEK_CUR文件偏移量设置为它的当前位置加上抵消字节。
SEEK_END文件偏移量的大小设置为文件+抵消字节。

lseek()允许设置文件偏移量超出了文件的末尾(但这并不改变文件的大小)。如果数据后写在这一点上,后续读取数据的差距(一个“洞”)返回null字节(' \ 0 & # 39;),直到数据实际上是写进差距。

lseek()函数会重新定位被打开文件的位移量,根据参数抵消以及那里的组合来决定:

SEEK_SET:
从文件头部开始偏移抵消个字节。
SEEK_CUR:
从文件当前读写的指针位置开始,增加偏移量个字节的偏移量。
SEEK_END:
文件偏移量设置为文件的大小加上偏移量字节。

测试代码:

# include  & lt; unistd.h>   # include  & lt; sys/types.h>   # include  & lt; sys/stat.h>   # include  & lt; fcntl.h>   # include  & lt; stdlib.h>   # include  & lt; stdio.h>      # define  BUFFER_SIZE  1024年   # define  SRC_FILE_NAME “src_file"   # define  DEST_FILE_NAME “dest_file"//根据传入的参数来设置偏移量   # define  OFFSET  (atoi (args [1])),      命令行参数个数,int 主要(int  char * args []), {   int 才能;src_file, dest_file;   unsigned 才能;char 迷[BUFFER_SIZE];   int 才能;real_read_len, off_set;   if 才能;(argc  !=, 2), {   ,,,流(stderr,,“用法:,% s 抵消\ n",, arg游戏[0]);   ,,,退出(1);   ,,}   src_file =,才能打开(O_RDONLY SRC_FILE_NAME也);   dest_file =,才能打开(DEST_FILE_NAME, O_WRONLY  |, O_CREAT、, S_IREAD  |, S_IWRITE );//所有者权限:rw光碟   if 才能;(src_file  & lt;, 0, | |, dest_file  & lt;, 0), {   ,,,流(stderr,“Open  file 错误! \ n");   ,,,退出(1);   ,,}   off_set 才能=,lseek (src_file,抵消,,SEEK_END);//注意,这里对偏移量取了相反数   ,,printf (“lseek (), reposisiton 从而file  offset  of  src_file:, % d \ n",, off_set);   而才能((=real_read_len 读(src_file,迷,sizeof(浅黄色))),祝辞,0),{   ,,,写(dest_file,迷,real_read_len);   ,,}   关闭才能(dest_file);   关闭才能(src_file);   return 才能;0;   }

如何在Linux中使用lseek函数

结果解析

观察抵消以及dest_file和src_file文件的大小不难看出:程序通过lseek函数将src_file文件指针重新定位到文件末尾+偏移量(注意,本程序对偏移量取了相反数,即文件末尾+(抵消))处,然后从文件末尾+偏移处开始向前复制文件到dest_file中。

关于如何在Linux中使用lseek函数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

如何在Linux中使用lseek函数