这篇文章给大家介绍如何在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; }
结果解析
观察抵消以及dest_file和src_file文件的大小不难看出:程序通过lseek函数将src_file文件指针重新定位到文件末尾+偏移量(注意,本程序对偏移量取了相反数,即文件末尾+(抵消))处,然后从文件末尾+偏移处开始向前复制文件到dest_file中。
关于如何在Linux中使用lseek函数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。