版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验 4、文件操作学生姓名 :李亚军学号:610041219专业班级:卓越计科121 班.实验目得通过编写文件读写及上锁得程序, 进一步熟悉 inux 中文件 I/O 相关得应用开发, 并且熟练掌握 open()、 read()、wie()、fcntl( )等函数得使用。2.实验内容在 inux 中 FFO就是一种进程之间得管道通信机制.Li ux 支持完整得IF 通信机制。 本实验内容,通过使用文件操作,仿真I (先进先出)结构以及生产者 消费者运行模型本实验中需要打开两个虚拟终端,分别运行生产者程序(producer)与消费者程序 ( stom r).此时两个进程同时对同一个文件进行读写操
2、作。因为这个文件就是临界资源 ,所以可以使用文件锁机制来保证两个进程对文件得访问都就是原子操作。先启动生产者进程 ,它负责创建仿真 F O 结构得文件(其实就是一个普通文件 )并投入生产 ,就就是按照给定得时间间隔 ,向 FIO 文件写入自动生成得字符 (在程序中用宏定义选择使用数字还就是使用英文字符),生产周期以及要生产得资源数通过参数传递给进程(默认生产周期为1s,要生产得资源数为 10 个字符 )。后启动得消费者进程按照给定得数目进行消费,首先从文件中读取相应数目得字符并在屏幕上显示 ,然后从文件中删除刚才消费过得数据 为了仿真 F FO 结构 ,此时需要使用两次复制来实现文件内容得偏移
3、。每次消费得资源数通过参数传递给进程,默认值为 个字符 .3.实验步骤(1)实验流程图本实验得两个程序得流程图如图:图6、4节流程图(2)代码头部文件代码 :my ock、s t my ocshrtl_typ ;/文件锁类型: L C 读取锁 ;F_WRLC 写入锁;_NCKoff_t _str;/相对位移量 */sor _wh ce;/相对位移量得起点SEEKSET;SEE_CU;SEEK_END :ff_t l len;/*加锁区域长度/解锁*/*/ id_t lpid;/* ;/loc _et/ntlok_se( int fd,int type)structmflockod_lok, l
4、ock;lock、 _hne= SEKST;lc、 l_str=;lock、 _en=;lc、 l_yp ype;loc、 l_pid=- ;/ 判断文件就是否可以上锁*/cntl( fd,_GETL ,lok);if(l ck、 _type!= F_ LCK )/*判断文件不能上锁得原因/i(lo、 l_typeF_RDLC )/*该文件已有读取锁pri tf( Red loc alead set byn”, lo、 p) ;e se (lo 、 l_type= _ LCK)/*该文件已有写入锁* printf(Wrie l c already set ydn”, lock、l_pid );
5、/ l_ype可能已被_GETLKlock、l_typ = tpe;修改过/根据不同得tye值进行阻塞式上锁或解锁*/i(( cntl( d, F_SELK ,&lock )0)rnt( ocaild:ype=% ”, lock、 l_typ);retur1;swith( ock、l_ ype)case F_RDCK:printf( Read l ckeb%dn , pi());break;case F WR C : rntf(Wr t oc seby%n”, gt id( );beak;cae F_UNLC :printf(” Reease loby%dn”,getpid();retur1;
6、 rk;e a lt:break; / nd of i h?/ etrn 0;生产者程序得源代码:producer 、c/ proucer、c*/#ildestio、#icudenid、h#includestdb、#i ude srig、hin udfnt、h#iclude” mylock、h#defie MLE10/ 缓冲区大小最大值 */#ene AHABET ?/ 表示使用英文字符 */#defne ALHABESTART a/ 头一个字符 ,可以用 A/efie COUNT_O_PHBE26/ 字母字符得个数*#defi IGIT/ 表示使用数字字符 */#dfine DIGITTAR
7、T/* 头一个数字字符 */defne CUNT_OF_DIGIT10/ 数字字符得个数 /#define SIN_TY EALPHA E/* 本实例用英文字符 */const ch*fif _ile”、mifo;/* ! FO 文件名 /chr bufMA LEN;?/ 缓冲区 /*函数 prodct()产生一个字符并写入仿真 FIFO 文件中*/intouct(id)int f;unsigned itsign_tye, ig_art,sig_ount, ize;ttic usined int c r =0; 打开! ” FFO 文件 * if ((d= open(fifo_ile, O_R
8、EAT|ORDRO_APED,04) )pinf( en fif n); exi(1);sig_tye=SGN_P;switc( sinype)cas ALPH BE:/* 英文字符 */sgntat= APHAET_AT;sgn_cout= CUNT_OPHBE; rea;a DIG :* 数字字符 */sign_sat=DIT_SART;sig_cout= COUNF_DIGIT;brek;defaul:retur1;/* nd oswch*/srintf(buff, c” , (sign_statoner));conter=(ounter +1)signoun;loc_set(d,FWR
9、LK);/*上写锁*/if((sizwrite(fd,b,stre(ff))0)pritf(rducer:writerro n”);etrn;lock_se(fd, F_NLCK );/*解锁*/close(f);retun0;int man(int argc,char*argv )int timestp1;/生产周期it timelife=10;/*需要生产得资源数 /if(ac1)/*第一个参数表示生产周期sscf(arg1, %d*/”,&time_ste);i(arc)第二个参数表示需要生产得资源数scf(ag2, %d, &time_li);while(tie_lie-)if(pro
10、ut()0)reak;slee(im_p);exit(EXIT_SUCCESS);消费者程序得源代码:customer 、/ cuso er、/ ncludstdi、h#incl dunist、 h#nclude#incl de#nclude” myock、 d e MX_?00*124*1024100M /costca*fifo fil 、/myfi o”;/*仿真FIO 文件名*/os ct p_ile=”、/tmp ”;/* 临时文件名*/资源消费函数 c tomin */int ust ig(con char*myfif , nneed)it fd;car bu f;int coun
11、e=0;if((f = open(myfio, O_DO Y))pintf(”Fn ion custmigerorn);? etu-1; rit(Enjoy :”) ;lseek(f , SEEKSET,0);whle(countneed)wil(read(f, bff ,1)=1) (couter eed))fputc( buf, s out);/、就就是在屏幕上 /0 得显示*/ounter ;fputs(n”, stdou) ;close(f);reun0;/* m ()函数 : 实现从 sour_file 文件得 of et 偏移处开始将 con 个字节数据复制到 det_fi 文件
12、*/int m(cnt chr r_ char*det_fle, int offset,int oun, it copyoe)intinfle,out fil ;nt cuter=0;cha buff_ it ;if(( _file= open(sour_ le, _RDONLY _NN OC)0)print( ” Fucti my ror n surce n” ); retun 1;if (ot_file= opn(d t_file, O_CRE T O_ R|_TR NCO_N BOCK ,64) i clude# n l dest l b、 h#i clud incl de stdlib
13、 、 h#i clufcn l 、hconst char*f f_= ”、 test ;const c ar*fi o_ ”、 / ”;int main()in f_ r;int f _d t ;in rea _num;char bu f 1 24; f (( d_s c = open ( f fo_) ) / 第三个参数便就是创建得文件得属性?print ( ”pen extn );ex t(1);i (f dst= pen ( i o_, _CREAT| _ DW |O_A PE ,0 44)) 0)prin f( ”Oen f le2 err rn );exit( ) ;b f r1 = 0;wh le(( re l_n m= ead(fd_s ,buff r, 100)! =0) f(real u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 零售业数据分析岗位面试要点解析
- 激光切割头行业市场调研报告
- 基于可持续发展理念的绿色产品供应链优化策略
- 快消品行业市场部面试经验
- 旅游公司办公室主任的职责与面试要求
- 基于心理疏导的校园文化建设新思路探索
- 8-Methyl-2-deoxydisporopsin-生命科学试剂-MCE
- 2026江苏南京大学SZYJ20260014生物医学工程学院招聘备考题库【夺冠系列】附答案详解
- 2026新疆第四师总医院春季招聘88人备考题库含答案详解【考试直接用】
- 2026河南安阳高新区就业见习单位及就业见习岗位招募备考题库附答案详解【研优卷】
- 2026延安志丹县人力资源和社会保障局公益性岗位招聘(50人)笔试备考题库及答案解析
- 车间内部转运车管理制度
- 2026年山东省立第三医院初级岗位公开招聘人员(27人)笔试参考题库及答案解析
- 2026湖北武汉市江汉城市更新有限公司及其下属子公司招聘11人笔试备考题库及答案解析
- 2026年温州永嘉县国有企业面向社会公开招聘工作人员12人笔试备考题库及答案解析
- 2026年广东省辅警笔试题库及1套参考答案
- 2026年高考数学二轮复习:专题13 数列的综合大题(含知识融合)9大题型(专题专练)(全国适用)(原卷版)
- 2026年时事政治测试题库100道附完整答案【考点梳理】
- 2025至2030中国变频器行业调研及市场前景预测评估报告
- 中医五行原理培训课件
- 2025年平顶山工业职业技术学院单招职业适应性考试题库附答案
评论
0/150
提交评论