保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

Linux编程入门(4)改变文件的读写位置

  当对某个文件进行操作时,我们可以指定文件的读写位置吗?答案是:当然可以。让我们一起来学习下,如何设置文件的操作位置。文件读写位置
  Linux系统每次打开一个文件,内核会用一个指针来记录该文件的偏移量,有时也称为读写偏移量或指针。文件偏移量是指执行下一个read()或者write()操作的文件起始位置,通常是非负整数,用以度量从文件开始处计算的字节数。文件内第一个字节的偏移量为0。
  文件打开时,文件偏移量的值设置为指向文件的开头。以后每次读或者写将自动对其进行调整,以指向已读或已写数据的下一个字节。
  当从文件读取数据时,内核从指针所表明的地方开始读取指定的字节,然后移动指针,指向下一个未被读取的字节。向文件写入数据的操作类似。
  指针是与文件描述符相关联的,而不是与文件关联的。如果两个程序同时打开一个文件,这时会有两个指针,两个程序对文件的读操作不会互相干扰。系统调用
  系统函数lseek()可以改变已经打开文件的当前读写位置。其函数原型如下includesystypes。hincludeunistd。hofftlseek(intfd,offtoffset,intwhence);
  针对文件描述符fd所指代的已打开文件,系统调用lseek()依照offset和whence参数值调整该文件的偏移量。
  参数fd,已打开文件的描述符。
  参数offset,指定了一个以字节为单位的数值。
  参数whence,表明应该参照哪个基点来解释offset参数,应为下列其中之一:
  SEEKSET
  将文件的偏移量设置为距文件开始处的offset个字节,其值必须为非负数。
  SEEKCUR
  将该文件的偏移量设置为距离当前位置处的offset个字节,即当前偏移量加offset(可为正或负)。
  SEEKEND
  将该文件的偏移量设置为距离文件结尾处的offset个字节,即文件偏移量设置为文件长度加offset(可为正或负)。
  lseek()返回值,调用成功,会返回新的文件偏移量;调用失败,返回1。
  通常,文件偏移量应当是一个非负整数。但是,某些设备也可能允许负的偏移量。对于普通文件,其偏移量必须是非负值。由于偏移量可能为负值,所以在判断lseek的返回值时,要测试它是否等于1,而不要测试它是否小于0。
  系统调用lseek(),只是调整内核中与文件描述符相关的文件偏移量记录,并没有引起任何IO操作,即没有对任何物理设备进行访问。
  lseek()并不适用于所有类型的文件。例如,不允许将lseek()应用于管道、FIFO、socket或者终端等。一旦如此,调用将会失败。文件空洞
  如果文件偏移超过文件结尾,可以吗?再执行IO操作会出现什么现象?
  文件的偏移量可以超出文件结尾。这种情况下,执行read()调用将返回0,表示已经到达文件结尾。执行write()函数却可以在文件结尾之后的任意位置写入数据。新写入数据的文件位置与文件结尾之间的空间,会构成一个空洞,即文件空洞。从编程的角度来看,文件空洞是存在字节的,读取空洞将返回0(空字节)。
  文件的空洞不占用任何磁盘空间。如果在文件空洞中写入了数据,文件系统才会为之分配磁盘块。带空洞的文件叫做稀疏文件。其优势在于,与为实际需要的空字节分配磁盘相比,稀疏填充的文件会占用较少的磁盘空间。
  空洞的存在,意味着一个文件名义上的大小可能要比其占用的磁盘存储总量要大(有时会大出许多)。向文件空洞中写入字节,内核需要为其分配存储单元,即使文件大小不变,系统的可用磁盘空间也将减少。示例代码
  让我们来写一段代码,来进行实验,调整文件偏移量,产生空洞文件。代码如下includefcntl。hincludesystypes。hincludeunistd。hincludestdlib。hincludestdio。hcharbuf1〔〕abcdefghijk;charbuf2〔〕ABCDEFGHIJK;intmain(void){intfd;创建新文件if((fdcreat(file。hole,0660))0){perror(createrror);}向文件写入缓冲区buf1数据if(write(fd,buf1,11)!11){perror(buf1writeerror);}以当前偏移量为基点,向后调整文件偏移量if(lseek(fd,16384,SEEKSET)1){perror(lseekerror);}在新的偏移量位置写入缓冲区buf2数据if(write(fd,buf2,11)!11){perror(buf2writeerror);}exit(0);}
  编译、运行后的结果如下:gcclseek。colseek1。lseek1lslfile。hole查看文件大小rwrw1useruser1639511月923:13file。holeodcfile。hole查看实际内容0000000abcdefghijk00000200040000ABCDEFGHIJK0040013
  使用od命令查看该文件的实际内容。命令中的c选项表示以字符方式打印文件内容。从中可以看到,文件中间的21个未写入字节都被读成0。每一行开始的7位数是以八进制形式表示的字节偏移量。总结
  经过本篇文章,学习了文件偏移相关内容,以及如何显示地调整文件偏移量。
  至此,文件IO基本的系统函数全部学习完毕。包括:
  open、close、read、write、lseek。
  OK,接下来,我们继续其他内容的学习。

我的行囊作文两则作文一:背起我的行囊在我们成长的路上的行囊里,有父母的叮咛,有师长的教导,有朋友的关爱,还有一路上储备起来的勇气、乐观、坚强一个人成长需要太多人的帮扶,成长的岁月抵……关于赏月的小学生作文关于赏月的小学生作文1今天是中秋之夜,我和家人在月光下赏月。今天的月光显得格外皎洁,深蓝色的天空映衬着洁白的圆月,这美丽的圆月散发着柔和的白光,将昏暗的夜空照亮,在……怀想天空的心情日记当一个人在看天的时候,他不是在寻找什么,他只是寂寞。题记裹了裹套在外面还算干净的校服,还是能从窗口灌进来的空气中知道清晨的微凉。回头瞥了眼窗外依稀可见的阳光,眼角瞄……2017年热爱生命的中考写作素材导语:2017中考备考正在火热进行中!同学们在备考的时候,可以收集一些作文素材大全,这样可以丰富文章的内容,提升文章思想的高度。以下是小编为大家精心整理的热爱生命的中考写作素材……北京朝阳区建立电商企业配送人员白名单机制今天(4月25日),在北京市疫情防控第314场新闻发布会上,朝阳区副区长杨蓓蓓介绍,为确保物资配送渠道畅通,朝阳区建立白名单机制。在疫情防控的总体要求之下,帮助美团买菜、每日优……面临股东压力,Twitter或接受马斯克430亿美元收购要约鞭牛士4月24日消息,据新浪科技消息,据熟知内情的消息人士透露,在亿万富翁埃隆马斯克透露他已获得465亿美元的融资之后,Twitter可能会变得更愿意接受他对该公司发起的收购要……全球首个月壤数字藏品发布昨天(4月24日),2022年中国航天日线上启动,以一首AI编曲版《东方红》致敬中国航天历史。在航天日期间,探月工程重磅发布了全球首个月壤数字藏品,通过前沿科技与航天技术的融合……我读悲伤逆流成河每个人心中都悬着一道悲伤的河,这道河真就如此悲伤?点点悲伤在不经意间经会成了翻滚的悲伤之河,其实我们太小看一滴ldquo;水rdquo;的力量了!几次打击,几次中伤,几次……精选中国文学常识大全1。第一位女诗人是:蔡琰(文姬)2。第一部纪传体通史:史记3。第一部词典是:尔雅4。第一部大百科全书是:永乐大典5。第一部诗歌总集是:诗经6。第一……老师我想对你说300字书信老师我想对您说:ldquo;是您在我幼小的心灵中种下了一颗要关心同学,有友爱朋友的种子。下面是老师我想对你说300字,希望对你有帮助。老师我想对你说300字【篇一】老师,……我的偶像是周杰伦作文他的每张专集我都会认认真真的听上N遍,但有不少大人说什么,他吐词不清之类的,昏死喔!不过人各有志,不能强求。就想罗志祥的歌:你说你的我说我的。其实我最欣赏的是杰伦的才气,……一封祝贺信英语作文导语:以下是小编为大家收集的一篇题为一封祝贺信英语作文。供大家参考阅读。希望喜欢。一封祝贺信英语作文DearSandy,亲爱的桑迪,Ioffermywa……
游鼓浪屿小学生作文爸爸妈妈带我去厦门玩,到了厦门就不得去那儿的大埠头一鼓浪屿。要去鼓浪屿当然要乘船。到海边呢,就听到了海风的呼啸声,听见了海水的翻滚声,闻到了海的气息,很清凉,好像在享受秋……我的网友作文我有一个很可爱的网友,他是练武术的,我们是在飞车游戏中认识的,当时,他还是一名菜鸟呢,现在他可不得了咯!经常把我逼得节节败退。我的网友他姓孙,他是一个很开朗的孩子,和同学……家乡的那条河三年级作文700字清澈的河水,一轮轮波纹被微风抚摸着,拍打在了岸上。如诗一般的意境,如童话一般的仙境浮现在了眼前。那优美恬静的河流,就是我家乡的河建河。我爱我的家乡,更爱那条河。它源远流长……新学期的打算新学期开始了!我们将以一个新的面貌走进校园。在新的学期里,我们要百尺竿头,更进一步。新学期应该这么做呢?第一个要求当然是:要认真完成老师布置的作业,一点都不能马虎,要一丝……作文美好的青春时代世界上美丽的东西千千万万,却没有一样比年轻更为美丽;世界上珍贵的东西数也数不清,却没有一样比青春更为宝贵。我们是多么值得骄傲多么让人羡慕啊!而我们若只是挥霍光阴,只是享受,不去……一个人不知道从什么时候开始变得坚强起来了,学会了不再懦弱。太在乎一些东西,所以一直一直将自己放在最卑微的位置。如今已经习惯了一个人,习惯微笑,不管心里面有多少难过都习惯了用微笑……如果世界的温度骤增到一亿摄氏度,但是只维持千亿分之一秒,会发一亿摄氏度,估计我们很难想象到是什么概念,到底有多热。也很难想象千亿分之一秒到底有多短。但一亿度和千亿分之一秒这两个数据并不是最重要的,其实问题本身可以表达为:如果极高的……关于描写樱花的作文800字我喜欢樱花,不仅仅只是因为它美丽的外表,也不仅仅是因为它独特的话语,更是因为它象征的意义。以下是小编收集整理的描写樱花的作文,希望对你有帮助。描写樱花的作文800字篇1依……感悟生命的作文关于感悟生命的作文篇1:生命只有一次,它是宇宙中最值得珍惜的。生命既是脆弱的,也是坚强的;是短暂的,也是永恒的。生命的存在就是一种希望。希望脆弱的生命坚强md……女博士用猪器官救绝症患者,你怎么看?科学兴农为您来答。首先对于题主问题不太恰当,咋看之下还以为已经成功将猪器官用于人体移植了呢。不过事实来说,2017年《科学》杂志所刊登的该项研究只是有望将猪器官应用于人体……小学回忆,寝室作文作文550字小学时的寝室我现在还是有深刻的印象的。我认为我一辈子都不会忘记它。小学的寝室分三个房间和一个客厅。说是客厅,其实上面积却不大。所有房间里面的床都是木制的上下床。客厅里有两……关于落叶高中生作文一年之中,我最喜欢的是夏天。因为夏天不仅阳光明媚,而且有许多热带果实也都已成熟。不但可以去海滩冲浪,还能美美的吃上一顿。这真不愧是人间一大美事!但是,直到那天我终于又领略……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网