进程间通信实验解析.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
进程间通信实验解析

进程间通信(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(),进行父子进程之间的通信。 编写的程序如下: fork函数执行完毕后,返回值pid0,则子进程创建失败,pid0,则运行父进程,关闭读操作,进行写操作,将信息写进管道,写完后关闭写操作,父进程挂起。Pid=0,运行子程序,关闭写操作,进行读操作,读完信息关闭读操作,子进程运行结束,父进程继续运行。 2.以命名行为参数的管道文件的示例。(假设有一个可执行程序chcase,从标准输入设备读字符,将小写字母转化成大写字母并输出。主程序使用popen创建管道,实现蒋某文本文件中的字幕转化成大写字母,其中的文本文件名作为参数传进来。) 命令行数量不为2时,输出结果如图所示; 创建一个可执行程序chcase,此程序从标准输入设备读字符,将小写字母转化成大写字母并输出。主程序使用popen()创建一个管道。再创建一个文本文件,输入将要转换成大写字母的小写字母。Popen创建的管道一头与文本文件相连,获取文本文件中的信息,将此信息通过管道传送给与管道另一端相连的可执行程序chcase,chcase获取文本文件中的小写字母后,将小写字母转换成大写字母输出。 创建有名管道。 当输入命令行数量为2时,打开管道,只进行写操作。不为2时,打开管道,只进行读操作。 且均循环26次。 4.软中断机制 #includestdio.h #includesignal.h #includeunistd.h void waiting(),stop(),alarming(); int wait_mark; main() { int p1,p2; if(p1=fork()) { if(p2=fork()) { wait_mark=1; signal(SIGINT,stop); signal(SIGALRM,alarming); waiting(); kill(p1,16); kill(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); 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); 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; } 程序调用fork()函数创建两个子进程,开始两个子进程处于等待状态。singal()函数让父进程获取中断信号^C;当父进程获取该中断信号后,父进程调用Kill()函数向两个子进程发出信号,该信号的作用是让子进程从等待状态转为执行状态,子进程捕捉到该信号后分别执行各自的程序。两个子进程执行完成后,父进程收到相应信号后,执行程序。 5.信号程序实例与修正 #include stdio.h #include sig

文档评论(0)

2299972 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档