这篇文章主要介绍了Linux lseek函数的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
注:如果文章内容有误,请留言指出,谢谢合作。
名字
名称:lseek -重新定位读/写文件偏移量
lseek函数的作用是用来重新定位文件读写的位移。
头文件以及函数声明
#包含sys/types.h
#包括unistd.h
off_t lseek(int fd,off_t offset,int where);
抵消为正则向文件末尾移动(向前移),为负数则向文件头部(向后移)。
描述
lseek()根据指令将与文件描述符软驱相关联的打开文件描述的文件偏移量重新定位到参数偏移量,如下所示:
SEEK_SET文件偏移量设置为偏移量字节。
搜索_当前文件偏移量设置为其当前位置加上偏移量字节。
寻道_结束文件偏移量设置为文件大小加上偏移量字节。
lseek()允许将文件偏移量设置为超出文件的末尾(但这不会改变文件的大小)。如果稍后在这一点写入数据,则随后对间隙(一个"洞")中的数据的读取将返回空字节(" "),直到数据实际写入间隙中。
lseek()函数会重新定位被打开文件的位移量,根据参数抵消以及据此的组合来决定:
SEEK_SET:
从文件头部开始偏移抵消个字节。
搜索_当前:
从文件当前读写的指针位置开始,增加抵消个字节的偏移量。
寻道_结束:
文件偏移量设置为文件的大小加上偏移量字节。
测试代码:
#包括unistd.h
#包含sys/types.h
#包含系统/统计信息
#包含fcntl.h
#包含标准库
#包含标准视频
#定义缓冲区大小1024
#定义资源文件名称资源文件
#定义建筑环境及HVAC系统模拟的软件平台文件名目标文件
//根据传入的参数来设置抵消
#定义偏移量(atoi(args[1])
int main(int argc,char*args[]) {
int src_file,dest _ file
无符号字符缓冲区[BUFFER _ SIZE];
int real_read_len,off _ set
如果(argc!=2) {
fprintf(stderr,用法:%s offsetn ,args[0]);
退出(-1);
}
src_file=open(SRC_FILE_NAME,O _ RDONLY);
dest _ FILE=open(DEST _文件名,O_WRONLY | O_CREAT,S _ IREAD | S _ IWRITE);//所有者权限:rw
if (src_file 0 || dest_file 0) {
fprintf(stderr,打开文件错误! n’);
出口(1);
}
off_set=lseek(src_file,-OFFSET,SEEK _ END);//注意,这里对抵消取了相反数
printf( lseek()在src _ file上重新定位的文件偏移量:%dn ,off _ set);
while((real _ read _ len=read(src _ file,buff,sizeof(buff))) 0) {
write(dest_file,buff,real _ read _ len);
}
关闭(dest _ file);
close(src _ file);
返回0;
}
结果解析
观察抵消以及目标文件和src_file文件的大小不难看出:程序通过lseek函数将src_file文件指针重新定位到文件末尾偏移(注意,本程序对抵消取了相反数,即文件末尾(-偏移))处,然后从文件末尾抵消处开始向前复制文件到目标文件中。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。