欢迎来到天天文库
浏览记录
ID:1201566
大小:139.50 KB
页数:11页
时间:2017-11-08
《操作系统课程设计报告64746new》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统课程设计实验报告姓名:曾林学号:0905020107班级:网络一班指导老师:李艳军完成时间:2012年3月4日任务一I/O系统调用开销比较一、实验目的:本任务主要目的在于了解I/O系统调用的特点并通过性能测试对此有直接的认识。二、任务要求:在LINUX平台用C编程逆序一个文本文件,注意显示逆转结果的必须是原文件名。如文件原内容为“abcd”,处理后内容应为“dcba”。请分别使用三种方法1)标准C的I/O库函数:fopen、fread和fwrite2)Unix的I/O函数:open、read、write3)open和mmap要求尽量考虑
2、效率,比较三种方法的性能。三、设计思路实验的主要是提供一个缓冲区,从而供库函数方便进行读写。首先申请一个缓存区,然后把文件的内容读出到缓存区中,通过逆序函数把文件的内容逆序,再把缓存区中的内容写入到原文件中,从而达到逆序的目的。针对read和fread每次读取数据大小有要求,主要在于读取或写入时缓冲区的大小,动态定义缓冲区的大小实现每次读取或写入数据的大小控制。为实现测试文件的内容能完整地存入中间容器,即字符串数组,需要动态申请文件大小的数组,存取文件中的内容。Mmanp指memory-mapped(存储映射)其将文件内容映射到进程地址空间,相
3、比传统的方法而言,减少了系统调用和内容拷贝,无需进行文件内容的读取和写入,减少了完成所需要的时间,提高了整体的效率,从而提高了性能。主要在于数据的重新排序。四、设计内容1.使用标准C的I/O库函数:fopen、fread和fwrite的设计代码如下:#include#include#includeintmain(intargc,char*argv[]){inti,j,filelen;char*buffer;chartemp;FILE*fp;if(argc!=2){printf("erro
4、r!");exit(0);}if((fp=fopen(argv[1],"r"))==NULL){printf("open%serror!",argv[1]);exit(0);}fseek(fp,0L,SEEK_END);filelen=ftell(fp);buffer=(char*)malloc(sizeof(char)*filelen);//申请缓存区fseek(fp,0L,SEEK_SET);printf("文件大小为:%d字节",filelen);fread(buffer,1,filelen,fp);//第二个参数为每次读数据的大
5、小fclose(fp);j=filelen-1;for(i=0;i6、如下:#include#include#include#include#include#include#include#defineBUFFSIZE256*1024;intmain(intargc,char*argv[]){inti,j,n,src;chartemp;char*buffer;charpath[20];size_tfz;structstatstatbuf;if(argc!=2){prin7、tf("请输入要打开的文件路径");scanf("%s",path);elsestrcpy(path,argv[1]);n=open(path,O_RDWR);if((src=open(path,O_RDWR))<0){perror("opensource");exit(EXIT_FAILURE);}if(fstat(src,&statbuf)<0){perror("fstatsource");exit(EXIT_FAILURE);}fz=statbuf.st_size;buffer=(char*)malloc(sizeof(char)*f8、z);read(n,buffer,fz);lseek(n,0,SEEK_SET);j=fz-1;for(i=0;i
6、如下:#include#include#include#include#include#include#include#defineBUFFSIZE256*1024;intmain(intargc,char*argv[]){inti,j,n,src;chartemp;char*buffer;charpath[20];size_tfz;structstatstatbuf;if(argc!=2){prin
7、tf("请输入要打开的文件路径");scanf("%s",path);elsestrcpy(path,argv[1]);n=open(path,O_RDWR);if((src=open(path,O_RDWR))<0){perror("opensource");exit(EXIT_FAILURE);}if(fstat(src,&statbuf)<0){perror("fstatsource");exit(EXIT_FAILURE);}fz=statbuf.st_size;buffer=(char*)malloc(sizeof(char)*f
8、z);read(n,buffer,fz);lseek(n,0,SEEK_SET);j=fz-1;for(i=0;i
此文档下载收益归作者所有