- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验4、文件操作
学生姓名: 李亚军 学 号: 6100412196 专业班级: 卓越计科121班
1.实验目的
通过编写文件读写及上锁的程序,进一步熟悉 Linux 中文件 I/O 相关的应用开发, 并且熟练掌握 open()、read()、write()、fcntl()等函数的使用。
2.实验内容
在 Linux 中 FIFO 是一种进程之间的管道通信机制。Linux 支持完整的 FIFO通信 机制。 本实验内容,通过使用文件操作,仿真 FIFO(先进先出)结构以及生产者-消费者运行模型。
本实验中需要打开两个虚拟终端,分别运行生产者程序(producer)和消费者程序(customer)。此时两个进程同时对同一个文件进行读写操作。因为这个文件是临界资源,所以可以使用文件锁机制来保证两个进程对文件的访问都是原子操作。
先启动生产者进程,它负责创建仿真 FIFO 结构的文件(其实是一个普通文件)并投入生产,就是按照给定的时间间隔,向 FIFO 文件写入自动生成的字符(在程序中用宏定义选择使用数字还是使用英文字符),生产周期以及要生产的资源数通过参数传递给进程(默认生产周期为 1s,要生产的资源数为 10 个字符)。
后启动的消费者进程按照给定的数目进行消费,首先从文件中读取相应数目的字符并在屏幕上显示,然后从文件中删除刚才消费过的数据。为了仿真 FIFO 结构,此时需要使用两次复制来实现文件内容的偏移。每次消费的资源数通过参数传递给进程,默认值为10 个字符。
3.实验步骤
(1)实验流程图 本实验的两个程序的流程图如图:
开始 开始
(producer) (customer)
消费资源
创建FIFO结构文件 (打印字符)
否
消费够了吗?
生产一个资源
是
上锁
上锁
将剩下的数据拷贝到
等待 临时文件tmp中
一秒 将“生产”的字符
写入到FIFO结构文件
用临时文件tmp覆盖
原数据文件,这样
模拟FIFO结构
解锁
解锁
生产完了吗?
删除临时文件
结束 结束
图 6.4 节流程图
(2)代码
头部文件代码:mylock.h
struct myflock
{
short l_type; /*文件锁类型: F_RDLOCK 读取锁;F_WRLCK 写入锁;F_UNLCK 解锁 */
off_t l_start; /*相对位移量*/
short l_whence; /*相对位移量的起点SEEK_SET;SEEK_CUR; SEEK_END: */
off_t l_len; /* 加锁区域长度 */
pid_t l_pid; /* */
} ;
/* lock_set */
int lock_set(int fd, int type)
{
struct myflock old_lock, lock;
lock.l_whence = SEEK_SET;
lock.l_start = 0;
lock.l_len = 0;
lock.l_type = type;
lock.l_pid = -1;
/* 判断文件是否可以上锁 */
fcntl(fd, F_GETLK, lock);
if (lock.l_type != F_UNLCK)
{
/* 判断文件不能上锁的原因 */
if (lock.l_type == F_RDLCK) /* 该文件已有读取锁 */
{
printf(Read lock already set by %d\n, lock.l_pid);
}
else if (lock.l_type == F_WRLCK) /* 该文件已有写入锁 */
{
printf(Write lock already set by %d\n, lock.l_pid);
}
}
/* l_type 可能已被 F_GETLK 修改过 */
lock.l_type = type;
/* 根据不同的 type 值进行阻塞式上锁或解锁 */
if ((fcntl(fd, F_SETLKW, lock)) 0)
{
printf(Lock failed:type = %d\n, lock.l_type); return 1;
您可能关注的文档
- 电子信息-第1章剖析.ppt
- 高中化学人教版必修1(最精华)浅析.doc
- 高中化学选修三第三章导浅析.doc
- 高中物理3-3复习知识点浅析.doc
- 电阻的串并联(物理中考复习)(399K)剖析.ppt
- 高中物理课堂听课笔记大全浅析.doc
- 高中物理新人教版选修3-3第八章第四节:气体热现象的微观意义导浅析.doc
- 高中信息会考1000题浅析.doc
- 高中英语语法分类解析浅析.doc
- 高中语文知识点浅析.doc
- 2025年中国无缝印花内衣数据监测研究报告.docx
- 中国RFID电子标签芯片行业发展分析及发展前景与投资研究报告2025-2028版.docx
- 2025年中国直轨电动开合帘数据监测研究报告.docx
- 2025年中国母线式穿墙套管数据监测报告.docx
- 2025年中国全棉女式盒装手帕行业投资前景及策略咨询研究报告.docx
- 2025年中国半躺式纤体机行业投资前景及策略咨询研究报告.docx
- 2025年中国过山羊数据监测报告.docx
- 2025年中国耐弯曲试验机数据监测报告.docx
- 2025年中国铝箔玻璃钢片行业市场调查、投资前景及策略咨询报告.docx
- 2025年中国乳胶制品数据监测报告.docx
最近下载
- 院感知识试题(附答案).docx VIP
- 分布式光伏电站屋顶租赁协议(标准范本).docx
- 高温防暑安全培训课件.pptx VIP
- 11SG534带水平段钢斜梯(45°)(OCR).pdf VIP
- 一升二数学《暑假作业》 每日一练.docx VIP
- 《商务-谈判》课程标准).doc VIP
- 对我国长距离浆体管道输送工程设计的思考-论文发表.PDF VIP
- 110(66)kV~500kV架空输电线路运行规范.ppt VIP
- 牛津译林版九年级上册英语Unit 1-Unit 8语法知识点复习提纲.pdf VIP
- 《GBT20001.3-2015标准编写规则第3部分:分类标准》(2025版)深度解析.pptx
文档评论(0)