操作系统上机报告_第1页
操作系统上机报告_第2页
操作系统上机报告_第3页
操作系统上机报告_第4页
操作系统上机报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统计算机报告实验1。匿名管道通信第一,实验目的学习创建匿名管道,并能够使用管道在进程之间进行通信。二、实验内容一个名为“父”的单个文档应用程序和一个名为“子”的单个文档应用程序分别被建立为父进程和子进程,并且由父进程创建匿名管道,使得父进程和子进程可以将数据写入和读取到匿名管道中。三、设计和实施过程这个实验是在VC6.0上实现的A.父进程首先,构建一个单一的父文档应用程序,添加“创建管道”、“读取数据”和“写入数据”三个菜单,并添加消息响应函数OnPipeCreate()、OnPipeRead()和OnPipeWrite()。在CParentView类中添加成员变量handle类型的hr

2、ead和hwrite,初始化变量,并在析构函数中释放HANDLE:void cpparentview : OnPipewrite()如果(!创建管道()/*创建匿名管道*/*消息“未能创建管道!”*/*退出*/如果(!创建进程()/*创建子进程*/*关闭手柄hRead,hWrite*/*消息“未能创建子进程!”*/*退出*/void cpparentview : OnPipeRead()/*定义用于存储读取数据的字符数组*/如果(!读取文件()/*读取数据*/*消息“读取数据失败!”*/*退出*/*打印读取的数据*/*退出*/void cpparentview : OnPipewrite()/

3、*定义用于存储写入数据的字符数组*/如果(!write file()/*写入数据*/*消息“写入数据失败!”*/*退出*/B.子过程创建一个单一的子文档,在CChildView中添加两个成员变量hread和hwrite成员类型HANDLE,并添加消息响应函数OnPipeRead()和OnPipeWrite(),然后添加虚拟函数OnInitialUpdate(),并释放析构函数中的句柄。void cchildview :3360 oninitialupdate()HRead=GetStdHandle()/*获取标准输入句柄*/HWrite=GetStdHandle()/*获取标准输出句柄*/vo

4、id cpparentview : OnPipeRead()/*定义用于存储读取数据的字符数组*/如果(!读取文件()/*读取数据*/*消息“读取数据失败!”*/*退出*/*打印读取的数据*/*退出*/void cpparentview : OnPipewrite()/*定义用于存储写入数据的字符数组*/如果(!write file()/*写入数据*/*消息“写入数据失败!”*/*退出*/# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #父流程代码# # # # # # # # # # # # # # # # #。无效cf

5、atherview : onpiece create()/在这里添加您的命令处理程序代码SECURITY _ ATTRIBUTES sasa.bInheritHandle=真;sa.lpSecurityDescriptor=空;sa . nLength=sizeof(SECURITy _ ATTRIBUTES);如果(!创建管道(hRead,hWrite,sa,0)消息框(“未能创建管道!”);返回;STARTUPINFO sui过程信息pi;ZeroMemory(sui,sizeof(STARTUPINFO);/将数据清零sui . CB=sizeof(STARTUPINFO);sui .

6、dwflags=STARTF _ USESSTDANDLES;sui.hStdInput=hReadsui.hStdOutput=hWritesui . hstderror=GetStdHandle(STD _ ERROR _ HANDLE);如果(!create process( H : 操作系统作业 实验1_匿名管道通信 子 调试 子. exe ,null,null,null,true,0,null,null,sui,pi)closeHandle(HRead);关闭句柄(Hwrite);/关闭句柄,从内核对象的使用计数中减去1,这样当操作系统找到内核对象时,当/的使用计数为0时,内核对象将

7、被清除。hRead=空;hWrite=空;消息框(“未能创建子进程!”);返回;其他closeHandle(pi . hpprocess);关闭句柄(pi . hthread);无效视图:打开()/在这里添加您的命令处理程序代码char buf100;DWORD dwRead如果(!ReadFile(hRead,buf,100,dwRead,NULL)消息框(“读取数据失败!”);返回;消息框(buf);无效CFatherView:OnInput()/在这里添加您的命令处理程序代码“你好,我是父进程!”;DWORD dwWrite如果(!写文件(hWrite,buf,strlen(buf) 1

8、,dwWrite,NULL)消息框(“写入数据失败!”);返回;# # # # # # # # # # # # # # # # # # # # # # # # # #子流程代码# # # # # # # # # # # # # # # # # # #。void cchildview : OnInput()/在这里添加您的命令处理程序代码char buf100;DWORD dwRead如果(!ReadFile(hRead,buf,100,dwRead,NULL)消息框(“读取数据失败!”);返回;消息框(buf);void cchildview : onwrite()/在这里添加您的命令处理程序

9、代码Char buf=“匿名管道测试器”;DWORD dwWrite如果(!写文件(hWrite,buf,strlen(buf) 1,dwWrite,NULL)消息框(“写入数据失败!”);返回;void cchildview :3360 oninitialupdate()cview : oninitialupdate();/在这里添加您的专用代码和/或调用基类hRead=GetSTDhandle(STD _ INPUT _ HANDLE);hWrite=GetSTDhandle(STD _ OUTPUT _ HANDLE);四.实施结果和分析创建管道:父进程向子进程发送信息:子进程向父进程发

10、送信息:五、思考与收获这是第一个计算机实验。我最初并没有学习C语言,只是学习了C语言的编程基础。当我第一次接触MFC的时候,我觉得编程很难。经过我的导师多次耐心的示范和指导,我终于能够自己完成这个过程。我觉得很有收获,主要是因为在这些课上学到的知识在我的生活中很难接触到。通过使用电脑,我可以真正用代码操纵电脑的操作系统来工作,这缩小了理论和实践之间的差距,让我觉得课堂不再枯燥和空虚。这个实验给了我一个非常直观的管道的感觉,这是一个进程之间的通信方法。通过人机交互,我手动选择在进程间发送和接收数据,这加强了我对管道通信特点的理解(连接两个进程,以先进先出的方式实现消息的单向传输)。实验二。创建过

11、程第一,实验目的学会使用基本的视窗或Linux进程控制功能,由父进程创建子进程,实现父子进程间的协作。二、实验内容创建两个进程,让子进程读取文件,父进程等待子进程读取文件后继续执行,实现进程间的协同工作。进程协作是协调两个进程,使它们能够按顺序排列并相应地执行,这可以通过使用等待功能来实现。当需要等待子进程完成运行时,可以在父进程中调用等待函数。假设现在有这样一个作业,需要计算1100的总和,而另一个作业是读写文件。我们可以让父进程计算并创建一个子进程来读写文件。三、设计和实施过程主要工作: 1。首先,父进程创建了一个子进程 2。让子进程创建一个文件并写入数据。当子进程写入文件时,父进程继续执

12、行计算工作 3。子流程执行完毕后,父流程读取文件内容并输出,实现流程间的协同工作。父流程框架 void main() /准备创建流程/创建子进程如果(创建失败)返回其他(创建成功)/计算1100的总和/子流程执行完毕后,读取子流程的文件内容并输出。 子流程框架 void main() /创建文件如果(失败)返回其他(成功)/将数据写入文件/读取文件内容输出 # # # # # # # # # # # # # # # # # # # # # # # # #父流程代码# # # # # # # # # # # # # #。int main()int I;int sum=0;字符读取100= ;过程

13、信息pi;STARTUPINFO sui/创建过程的准备零记忆(sui,sizeof(sui);sui . CB=sizeof(STARTUPINFO);如果(!create PRocESS( H : 操作系统作业 实验2_创建进程 子 调试 子. exe ,null,null,null,false,create _ new _ console,null,null,sui,pi)返回0;Else/创建成功/父进程继续执行对于(I=1;i=100I)sum=i。睡眠(10);printf(sum=%dn ,sum);WaitForSingleObject(pi . hpprocess,INDENTAL);FILE * pfile 1=fopen( H : 操作系统作业 实验2_创建过程kang.txt , r );fread(读取,大小(字符),100,pfile 1);/fread第二个参数是每个字符的大小/文件打开方式需改为可读写fc丢失(pfile 1);打印(%sn),已读);返回0;# # # # # # # # # # # # # # # # # # # # # # # # # # #子进程代码# # # # # # # # # # # # # # # # # # # # # # # # # # #int main()char *目录=你成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论