- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
江西理工大学应用科学学院嵌入式系统开发技术课程设计专 业: 电子信息工程 班 级: 083 学 号: 21号 25号 姓 名: 熊冰宇 陈志伟 设计题目: 多进程程序设计 2011年11月课程设计评分表姓 名班 级学 号课设题目指导教师评分项目满分分值得分设计文档(30分)文档格式封面2页面布局4目录格式3图表质量2页眉页脚2文档内容内容完整性6内容逻辑性5内容正确性6程序代码(30分)程序功能15编程规范7编程文档8答辩(20分)课题陈述7问题答辩10是否超时3考勤(20分)20总评成绩指导教师评语签名: 年 月 日教研室意见签名: 年 月 日目录1 设计概述11.1 设计简介11.2设计目的11.3设计要求12 设计内容22.1编写目的22.2需求概述22.3设计概述93编写代码144实验分析报告154.1实验结果15实验总结176附录211 设计概述设计简介嵌入式系统软件的实时性是其非常重要的特性,采用多进程设计可以提高系统的效率,增强系统的实时性,因此,掌握多进程编程,是学习嵌入式Linux必须达到的目标设计目的本课程设计通过设计多进程程序,掌握创建多进程的方法,掌握通过有名管道实现进程之间的通信,掌握进程中运行现有程序的方法。“生产者消费者”问题是一个著名的同时性编程问题的集合。通过学习经典的“生产者消费者”问题的实验,读者可以进一步熟悉Linux中的多线程编程,并且掌握用信号量处理处理线程间的同步和互斥问题。设计要求本课题所设计的系统要求实现以下功能。创建子进程1及子进程2。子进程1创建子进程A、B,子进程1等待子进程A、B退出后退出。子进程A、B之间通过有名管道FIFO1进行通信,实现生产者-消费者功能。子进程2创建子进程C、D,子进程C运行“ls –l”命令,子进程D通过有名管道FIFO1作为消费者与进程A通信。2设计内容2.1编写目的通过编写多进程程序,使读者熟练掌握fork()、exec()、wait()和waitpid()等函数的实用,进一步理解在Linux中多进程编程的步骤。2.2需求概述创建子进程1及子进程2。子进程1创建子进程A、B,子进程1等待子进程A、B退出后退出。子进程A、B之间通过有名管道FIFO1进行通信,实现生产者-消费者功能。子进程2创建子进程C、D,子进程C运行“ls –l”命令,子进程D通过有名管道FIFO1作为消费者与进程A通信。2.3设计概述(1)画出设计的流程图 该设计的流程图如图2.3所示 图2.3多路进程流程图3编写代码/* multi_proc.c */#include stdio.h#include stdlib.h#include sys/types.h#include unistd.h#include sys/wait.hint main(void){pid_t child1, child2, child;/*创建两个子进程*/child1 = fork();/*子进程1的出错处理*/if (child1 == -1){printf(Child1 fork error\n);exit(1);}else if (child1 == 0) /*在子进程1中调用execlp函数*/{printf(In child1: execute ls -l\n);if (execlp(ls, ls, -l, NULL) 0){printf(Child1 execlp error\n);} } else /*在父进程中等待子进程2的退出*/ { child2 = fork(); if (child2 == -1) /*子进程2的出错处理*/ { printf(Child2 fork error\n); exit(1); } else if( child2 == 0 ) /*在子进程2中使其暂停5s*/ { printf(In child2: sleep for 5 seconds and then exit\n); sleep(5); exit(0); } printf(In father process:\n); child = waitpid(child1, NULL, 0); if (child == child1) { printf(Get child1 exit code\n); } else { printf(Error occured!\n); } do { child = waitpid(child2, NULL, WNOHANG ); if (child == 0) { printf(The child2 process has not exited!\n); sleep(1); } } while (child == 0); if (chil
文档评论(0)