西电计算机操作系统进程通信西电计算机操作系统进程通信.docVIP

  • 15
  • 0
  • 约1.37万字
  • 约 16页
  • 2017-04-23 发布于贵州
  • 举报

西电计算机操作系统进程通信西电计算机操作系统进程通信.doc

西安电子科技大学《操作系统原理》实验报告 西安电子科技大学 计算机学院 实 验 报 告 题目: 进程通信 班级: 姓名: 学号: 内容摘要: 通信进程个数2个采用的通信方式匿名管道实验内容补充说明无 一、分析和设计 1. 理论分析 匿名管道主要用在本地父子进程之间的通信,首先由父进程创建一个匿名管道,在创建成功后,便可以获得匿名管道的读写句柄,然后父进程就可以向匿名管道中写入和读取数据。要实现父子间通信,就要父进程中创建一个子进程,子进程可以继承和使用父进程的一些句柄。在创建子进程的过程中,必须将子进程的标准输入句柄设置为父进程的读管道的句柄,子进程的标准输出句柄设置为父进程的写管道的句柄,这样,父子进程之间就可以通信了。 2. 总体设计 管道一 先由父进程创建一个匿名管道,再由父进程获得读写句柄,构建读写的方式;由父进程创建子进程,实现父进程一样的通信功能。 父进程 子进程 管道二 二、详细实现 1、父进程的实现 1)消息以及成员函数和成员变量的声明 public: afx_msg void OnBnClickedBtnCreatePipe(); //创建匿名管道 afx_msg void OnBnClickedBtnWritePipe(); //写匿名管道 afx_msg void OnBnClickedBtnReadPipe(); //读匿名管道 void ParentReadPipe(void); //定义父进程读匿名管道的成员函数 void ParentWritePipe(void); //定义父进程写匿名管道的成员函数 void CreateSecurityAttributes(PSECURITY_ATTRIBUTES pSa); //创建 SECURITY_ATTRIBUTES 结构的成员函数 void CreateStartUpInfo(LPSTARTUPINFO lpStartUpInfo); //创建 STARTUPINFO 结构的成员函数 void CreateNoNamedPipe(void); //创建匿名管道的成员函数 //分别代表要从匿名管道中读的数据和要写到匿名管道中的数据 CString m_CStrReadPipe; CString m_CStrWritePipe; //保存创建匿名管道后所得到的对匿名管道的读写句柄 HANDLE hPipeRead; HANDLE hPipeWrite; //保证匿名管道只创建一次 BOOL m_PipeIsCreated; 2)消息处理函数 //创建匿名管道按钮的消息处理函数 void CNoNamedPipeParentDlg::OnBnClickedBtnCreatePipe() { if(m_PipeIsCreated == FALSE) { this-CreateNoNamedPipe(); } } //写入数据到匿名管道中按钮的消息处理函数 void CNoNamedPipeParentDlg::OnBnClickedBtnWritePipe() { this-ParentWritePipe(); } //从匿名管道中读取数据按钮的消息处理函数 void CNoNamedPipeParentDlg::OnBnClickedBtnReadPipe() { this-ParentReadPipe(); } //接收数据 void CNoNamedPipeParentDlg::ParentReadPipe(void); //发送数据 void CNoNamedPipeParentDlg::ParentWritePipe(void) //创建 SECURITY_ATTRIBUTES 结构 void CNoNamedPipeParentDlg::CreateSecurityAttributes(PSECURITY_ATTRIBUTES pSa) { //这里必须将 bInheritHandle 设置为 TRUE, //从而使得子进程可以继承父进程创建的匿名管道的句柄 pSa-bInheritHandle = TRUE; pSa-lpSecurityDescriptor = NULL; pSa-nLength = sizeo

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档