资源描述:
《实验5Linux文件操作之带缓存和非缓冲文件的读写.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、·实验5Linux文件操作之带缓存和非缓冲文件的读写学生姓名:王祥真学号:6103114095专业班级:计科143实验类型:□验证▥综合□设计□创新实验日期:2017.4.20实验成绩:一.实验目的通过编写文件读写及上锁的程序,进一步熟悉Linux中文件I/O相关的应用开发,并且熟练掌握open()、read()、write()、fcntl()等函数的使用。二.实验内容1.用write,read,open等系统调用编写分别实现如下功能的程序(要求进行必要的出错检查):(1)创建一个文件testfile.txt,文件内容从键盘输入;(2)将testfile.txt的内容显示在屏幕上
2、,并将testfile.txt的内容复制到一个新的文件file2.txt中。实验代码:#include#include#include#include#include#include#include#includeintmain(){intfd,fdsrc,fddes,nbytes;intnewret,n1,n2;intflags=O_CREAT
3、O_TRUNC
4、O_WRONLY;charsrc[50],des[30]
5、,buf[30];10charstr1[60];charstr2[60];strcat(str1,"cat");printf("请输入要创建的源文件名字");scanf("%s",src);fd=creat(src,S_IRUSR
6、S_IWUSR);//创建源文件n1=read(STDIN_FILENO,buf,80);if(n1<0){perror("readSTDIN_FILENO");exit(1);}fdsrc=open(src,flags,0644);//以读写方式打开if(fdsrc<0){exit(1);}write(fdsrc,buf,n1);//写入printf
7、("输出刚创建源文件的内容");strcat(str1,src);//catsrc;newret=system(str1);//执行命令close(fdsrc);//关闭指针printf("请输入目标文件名:");scanf("%s",des);fd=creat(des,S_IRUSR
8、S_IWUSR);fdsrc=open(src,O_RDONLY);if(fdsrc<0){exit(1);}fddes=open(des,flags,0744);10if(fddes<0){exit(1);}while((nbytes=read(fdsrc,buf,20))>0){intz=
9、write(fddes,buf,nbytes);if(z<0){perror("写文件出错");}}close(fdsrc);close(fddes);printf("复制%s文件到%s文件成功!",src,des);return0;}实验结果:2.在Linux中FIFO是一种进程之间的管道通信机制。Linux支持完整的FIFO通信机制。本实验内容,通过使用文件操作,仿真FIFO(先进先出)结构以及生产者-消费者运行模型。10本实验中需要打开两个虚拟终端,分别运行生产者程序(producer)和消费者程序(customer)。此时两个进程同时对同一个文件进行读写操作。因为这个
10、文件是临界资源,所以可以使用文件锁机制来保证两个进程对文件的访问都是原子操作。先启动生产者进程,它负责创建仿真FIFO结构的文件(其实是一个普通文件)并投入生产,就是按照给定的时间间隔,向FIFO文件写入自动生成的字符(在程序中用宏定义选择使用数字还是使用英文字符),生产周期以及要生产的资源数通过参数传递给进程(默认生产周期为1s,要生产的资源数为10个字符)。后启动的消费者进程按照给定的数目进行消费,首先从文件中读取相应数目的字符并在屏幕上显示,然后从文件中删除刚才消费过的数据。为了仿真FIFO结构,此时需要使用两次复制来实现文件内容的偏移。每次消费的资源数通过参数传递给进程,
11、默认值为10个字符。三.实验环境PC微机Windows操作系统、虚拟机、Linux操作系统四.实验步骤1.编写代码实现要求的功能;2.本实验问验证实验,但其中用到的文件操作函数和重要的文件锁操作:1)实验流程图本实验的两个程序的流程图如图:开始开始(producer)(customer)消费资源创建FIFO结构文件(打印字符)否消费够了吗?生产一个资源是上锁上锁将剩下的数据拷贝到10等待临时文件tmp中一秒将“生产”的字符写入到FIFO结构文件用临时文件tmp覆盖原数据文件,这样