如何在Linux中使用lseek函数

2022年 10月 17日 发表评论

新春采购季点击领腾讯云8888元代金券阿里云史上最大力度降价,最高降55%:点击了解续费贵、升级贵,选配置高、长期的产品;腾讯云老用户享新人优惠方法:用Q登录、1人可注册3个新账号帕鲁火热:点击一键部署阿里云帕鲁服务器点击一键部署腾讯云帕鲁服务器

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

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

头文件以及函数声明

#包括ys/类型。h

# includeunistd.h

off_tlseek(intfd,off_toffset,int wharth);抵消为正则向文件末尾移动(向前移),为负数则向文件头部(向后移)。

描述

lseek()根据指令将与文件描述符软驱相关联的打开文件描述的文件偏移量重新定位到参数偏移量,如下所示3360

文件偏移量被设置为偏移字节。

文件偏移量被设置为其当前位置加上偏移量字节。

文件偏移量被设置为文件加上偏移量字节的大小。

lseek()允许将文件偏移量设置在文件末尾之外(但这不会改变文件的大小)。如果稍后在此点写入数据,对间隙("孔")中数据的后续读取将返回空字节(""),直到数据实际写入间隙。

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

SEEK_SET:

从文件头部开始偏移抵消个字节。

SEEK_CUR:

从文件当前读写的指针位置开始,增加抵消个字节的偏移量。

搜索结束:

文件偏移量设置为文件的大小加上偏移量字节。

测试代码:

# includeunistd.h

#包括ys/类型。h

#includesys/stat.h

# includefcntl.h

# includestdlib.h

# includestdio.h

#defineBUFFER_SIZE1024

#defineSRC_FILE_NAME'src_file '

#定义目标文件名称'目标文件'

//根据传入的参数来设置抵消

# define offset(atoi(args[1])

intmain(intargc,char*args[]){

intsrc_file,dest _ file

unsignedcharbuff[BUFFER _ SIZE];

intreal _ read _ len,offset

if(argc!=2){

fprintf(stderr,“用法:%偏移量 n”,参数[0]);

出口(-1);

}

src_file=open(SRC_FILE_NAME,O _ RDONLY);

dest_file=open(DEST_FILE_NAME,O_WRONLY|O_CREAT,S _ IREAD | S _ IWRITE);//所有者权限:rw

if(src_file0||dest_file0){

fprintf(stderr,' Openfileerror! n ');

出口(1);

}

off_set=lseek(src_file,-OFFSET,SEEK _ END);//注意,这里对抵消取了相反数

printf(' lseek()。respisitontfileoffsetofsrc _ file :% d n ',off _ set);

while((real _ read _ len=read(src _ file,buff,sizeof(buff)))0){

write(dest_file,buff,real _ read _ len);

}

关闭(dest _ file);

关闭(src _ file);

返回0;

}如何在Linux中使用lseek函数

结果解析

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

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

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: