欢迎来到天天文库
浏览记录
ID:28446093
大小:79.70 KB
页数:3页
时间:2018-12-10
《linux环境高级编程实验报告1》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、作业报告学生姓名:学号:指导教师:学生E-mail:一、作业名称O_APPEND与读操作二、作业要求使用LinuxAPI进行文件操作吋,首先会使用open/creat打开或创建一个文件,接着使用lseek指定从什么地方开始进行文件的读写,之后即可调用read/write读写文件,最后文件读写完毕,调用close关闭文件。对于open函数,可以通过函数原型中的第二个参数來控制文件打开的模式,其中O_APPEND标志表示以该模式打开文件吋,每次写的数据都会放在文件尾部,这点也以通过课堂实验验证了其正确性。那么本文是通过自行设
2、计程序验证以下两点:①、以O_APPEND模式打开文件后,能否再用lseek改变文件偏移景;②、若能够用lseek改变文件偏移量,读操作会如何进行,是否像写操作那样,每次都从文件尾部读,或者其他方式。三、设计与实现思路如下:首先以CLAPPEND方式打幵一个文件,使用lseek多次修改文件的偏移量,并记录每次修改后的文件偏移量,最G进行比较,得出结论:若修改后的偏移量改变,说明以O_APPEND方式打开文件,仍能够用lseek改变文件偏移量。反之则不成立。另外,在每次lseek对偏移量进行修改后,进行读操作,比较读出的结
3、果来判断其体的读操作。测试测试过程如卜、以O_APPEND方式打开文件(测试文件textl.txt以创建):intfd=open("exl_test.txt",O_RDWR
4、O_APPEND);第一次用lseek修改偏移量,进行读操作:off_tCurrentPosition1=lseek(fd,O,SEEK_CUR);cout«"FirstCurrentPositionis:H«CurrentPosition1«endl;read(fd,&word_read1,sizeof(word_read1));实际上米修改,打印
5、打开后文件当前偏移量,读出文件的第一个字符。第二次用Iseek修改偏移量,进行读操作:off_tCurrentPosition2=lseek(fd,9,SEEK_CUR);read(fd,&word_read2,sizeof(word_read2));这次从当前偏移量A后移动9个字节,读出字符。第三次用Iseek修改偏移量,进行读操作:off_tCurrentPosition3=lseek(fd,2,SEEK_SET);read(fd,&word_read3,sizeof(word_read3));这次从文件头向•移动2
6、个字节的偏移量,读出字符。测试结果如图4-1所示:cpproot@ujuxuanle:"#Iscexl_test.cppexl_test.txtroot@iuuxuanle:g++-oexl.testexl.testroot@ujuxuanle:catexl_test.txt2YXWVUTSRQP0root@ujuxuanle:Is10Pcexl.testexl_test.cppexl_test.txtroot@ujuxuanle:./exl_testFirstCurrentPositionis:0Readtheword
7、firstlyis:ZSecondCurrentPositionisReadthewordsecondlyisThirdCurrentpositionis:Readthewordthirdlyis:root@ujuxuanle:图4-1测试程序的运行结果从阁4-1所示的运行结果可以看出,三次不同的偏移景修改后,文件偏移量不同,说明以O_APPEND方式打开文件,仍然能够用Iseek修改偏移量。而三次读出的结果也都不同,说明以O_APPEND方式打开文件后,可以从任意位置进行文件的读操作。五、对本课程或本作业的建议和意见作
8、业一是对文件操作的练习,该部分是后面实现H志的基础,主要利用到Linux提供的API函数进行文件操作。关键之处在于三点:丨、对于新接触的内容,要学会与过去内容进行对比学习;2、耍思考本质问题,并提出一些质疑;3、对于提出的问题可以作出一些判断,最重耍的是动手去验证这些问题。建议:课吋等原凶的限制,整个课程的学>]进度比较快,不过还是希帮讲解慢点,尤其是晚上的课吋,注意力很难集屮。六、附录intmain(){charword_read1,word_read2,word_read3;//记隶读出字符intfd=open(He
9、xl_test.txt'O_RDWR
10、O_APPEND);//O_APFEND方式打开文件if(fd==-l){}off」CurrentPositionl=Iseek(fd,0,SEEK_CUR);//第一次修改偏移fi并记录if(CurrcntPosition1==-!){cout«"FirstCurrentPo
此文档下载收益归作者所有