- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三进程间通信和信号灯汇编
实验三进程间通信和信号灯班级:姓名:学号:实验目的理解Linux关于进程通信的概念。掌握通过无名管道PIPE进行进程间通信的方法。巩固进程同步概念和实现进程同步的方法。加深对生产者消费者问题的理解。学会使用Linux 信号量控制系统调用(PV操作)。实验内容编写一个程序,该程序主进程用来接受用户键盘输入的信息,子进程则将键盘输入的内容显示在屏幕上,该过程要求重复出现,直到用户使用ctrl+c终止程序运行。该实验内容其实质也是生产者消费者的问题,即一个进程产生数据(由用户输入),另一个进程输出之前由用户输入的数据。两个进程之间通过进程通信(IPC)技术来实现消息的传递,为了简化编码的复杂度,我们使用Linux中的管道技术(无名PIPE)实现进程间通信(有兴趣的同学,可以在完成后尝试使用共享内存的方式来进行进程间通信)。我们要求使用PV操作对信号量进行控制,从而实现生产者进程和消费者进程之间合理有序的工作(进程同步问题的进一步深入理解)。这里的PV操作,我们利用Linux系统提供的信号量系统调用来实现。学习管道系统调用所需头文件 :#includeunistd.hint pipe(intfiledes[2]); /*pipe()会建立管道,并将文件描述词由参数filedes数组返回。*/filedes[0]为管道里的读取端,所以pipe用read调用的filedes[1]则为管道的写入端。ssize_t write(intfd, const void *buf, size_t count); /*像fd所指向的管道操作符(文件)写入数据*/第一个参数表示所要写入数据的文件操作符,这里为管道操作符。第二个参数表示所要写入信息所在的缓存区。第三个参数表示缓冲区中前多少个数据应该被写入文件fd中。通常设定为缓冲区的大小。例子: write(filedes[1], buf, sizeof(buf);ssize_t read(intfd, const void *buf, size_t count); /*读取fd所指向的管道操作符的数据到缓冲区buf中*/第一个参数表示所要读取数据的文件操作符,这里为管道操作符。第二个参数表示读取的数据存放在哪里(注意数据类型)。第三个参数表示读取读取多少个字符,一般为缓冲区的大小。例子: read(filedes[0], buf, sizeof(buf));请首先阅读下面程序,理解管道pipe如何使用,然后请输入该程序并编译运行,观察运行结果。我们希望子进程里的内容全部执行完毕,即先汇报自己是子进程和PID号,然后把信息写入管道,再报告信息写入完毕。然后父进程才开始执行,报告自己是父进程,并显示从子进程收到的信息,这时程序运行完毕。但由于进程推进的速度不可预知,所以该程序有问题。请思考如何利用信号灯控制(原语化),以达到预期的目的。(这里不要求重写此程序,因为后面的程序设计会涵盖该问题)学习信号量控制函数:所需头文件:#include semaphore.h#include fcntl.h#include sys/stat.hsem_t variable; /*定义一个信号量的指针*/例子: sem_t *mutex;sem_t* sem_open(const char *name, intoflag); /*用来创建一个POSIX信号量或打开一个已经存POSIX在的信号量,返回值为该信号灯的指针*/第一个参数指明了型号量的外部名字,系统中的信号量是按信号量的名字进行识别的。第二个参数指明了对第一个参数所指定的型号量进行什么样的操作,一般使用O_CREAT表示创建一个信号量,当使用O_CREAT时,要求使用额外的参数指定该信号量的权限(类似于open函数的参数)。例子: mutex = sem_open(“mutex”, O_CREAT, 0644, 0);其中0644为权限位;0表示信号量初始值,该值可在后续初始化函数中做修改。sem_init(sem_t *sem, intpshared, unsigned int value); /*初始化信号量,在创建完信号量后使用*/第一个参数为之前定义的信号量指针。第二个参数表示该信号量是在线程间进行通信还是在进程间进行通信。当其值为0时,表示应用于线程间,当其值为1时,表示应用于进程间。第三个参数为一个非负整形变量,代表信号量的初始值(可用资源量)。例子: sem_init(mutex, 1, 1);sem_wait(sem_t *sem); /*申请资源,信号量值减一,P操作*/参数为要进行P操作的信号量的指针。例子: sem_wait(mutex);sem_post(sem_t *sem); /*释放资源,信号量值加一,V操作*/参数为要进行V操作的信
您可能关注的文档
最近下载
- (正式版)DB61∕T 1486.8-2021 《设施茄果类蔬菜水肥一体化技术规范 第8部分:辣椒基质栽培》.docx VIP
- (正式版)DB61∕T 1486.8-2021 《设施茄果类蔬菜水肥一体化技术规范 第8部分:辣椒基质栽培》.pdf VIP
- 《光伏玻璃工艺讲解》课件.ppt VIP
- 迅达扶梯9300ae产品介绍.pdf VIP
- SL747-2016采矿业建设项目水资源论证导则.pdf VIP
- 重症医学科专科护士工作汇报.ppt VIP
- 云南省茶叶出口影响因素的实证研究.docx VIP
- crrt专科护士汇报ppt.pptx VIP
- 毕业设计(论文)-星型发动机设计.docx
- 除尘器噪音标准.pdf VIP
原创力文档


文档评论(0)