- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程间的通信汇编
进程间通信(1)
调试以下程序给出运行结果并分析其程序原理:
#include stdio.h
#include unistd.h
#include wait.h
#include signal.h
#include stdlib.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
(1)编写两个程实现进程的无名管道和有名管道通信。要求分别调用pipe()、close()、write()、read()、popen()、pclose()、mknod()、mkfifo()、open()实现多个进程间的通信。
1.使用无名管道pipe(),进行父子进程之间的通信。
编写的程序如下:
运行结果:
2.以命名行为参数的管道文件的示例。(假设有一个可执行程序chcase,从标准输入设备读字符,将小写字母转化成大写字母并输出。主程序使用popen创建管道,实现蒋某文本文件中的字幕转化成大写字母,其中的文本文件名作为参数传进来。)
Text.c文件
运行结果:
3.创建有名管道。
运行结果
4.软中断机制
#includestdio.h
#includesignal.h
#includeunistd.h
void waiting(),stop(),alarming();
int wait_mark;
main()
{
int p1,p2;
if(p1=fork()) /*创建子进程p1*/
{
if(p2=fork()) /*创建子进程p2*/
{
wait_mark=1;
signal(SIGINT,stop); /*接收到^c信号,转stop*/
signal(SIGALRM,alarming);/*接受SIGALRM
waiting();
kill(p1,16); /*向p1发软中断信号16*/
kill(p2,17); /*向p2发软中断信号17*/
wait(0); /*同步*/
wait(0);
printf(parent process is killed!\n);
exit(0);
}
else
{
wait_mark=1;
signal(17,stop);
signal(SIGINT,SIG_IGN); /*忽略 ^c信号*/
while (wait_mark!=0);
lockf(1,1,0);
printf(child process2 is killed by parent!\n);
lockf(1,0,0);
exit(0);
}
}
else
{
wait_mark=1;
signal(16,stop);
signal(SIGINT,SIG_IGN); /*忽略^c信号*/
while (wait_mark!=0)
lockf(1,1,0);
printf(child process1 is killed by parent!\n);
lockf(1,0,0);
exit(0);
}
}
void waiting()
{
sleep(5);
if (wait_mark!=0)
kill(getpid(),SIGALRM);
}
void alarming()
{
wait_mark=0;
}
void stop()
{
wait_mark=0;
}
运行结果:
5.信号程序实例与修正
#include stdio.h
#include signal.h
#include unistd.h
void waiting( ),stop( );
int wait_mark;
main( )
{
int p1,p2,stdout;
while((p1=fork( ))= =-1); /*创建子进程p1*/((p2=fork( ))= =-1); /*创建子进程p2*/ wait_mark=1;
signal(SIGINT,stop); /*接收到^c信号,转stop*/
waiting( );
kill(p1,16); /*向p1发软中断信号16*/
kill(p2,17); /*向p2发软中断信号17*/
wait(0); /*同步*/
wait(0);
printf(Parent proce
您可能关注的文档
最近下载
- 血清酶变化的生理病理机制.ppt VIP
- 2025年秋季新教材部编版小学道德与法治三年级上册全册道法核心素养教案(教学设计)含教学反思.docx VIP
- 《智能机械与机器人》课件——3室内喷涂机器人施工工艺.pptx VIP
- 公司出门条模板.doc VIP
- 最新五年级(上册)《生活生命与安全》(全册)教案.docx
- 科学开学第一课.ppt VIP
- 《智能机械与机器人》课件——地面抹平机器人.pptx VIP
- (统编版2025新教材)道德与法治三年级上册开学第一课.pptx
- 1.2《我们都是社会的一员》【课件】2025-2026学年度统编版道德与法治八年级上册.pptx VIP
- 《智能机械与机器人》课件——地面整平机器人.pptx VIP
文档评论(0)