欢迎来到天天文库
浏览记录
ID:55955526
大小:305.50 KB
页数:29页
时间:2020-06-18
《操作系统上机报告材料.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统上机报告实验一、匿名管道通信一、实验目的学会创建匿名管道,并且能够利用管道进行进程间的通信。二、实验容分别建立名为Parent的单文档应用程序和Child的单文档应用程序作为父子进程,由父进程创建一个匿名管道,实现父子进程向匿名管道写入和读取数据。三、设计与实现过程本实验在VC6.0上实现§A.父进程§先建一个Parent的单文档应用程序,增加“创建管道”“读取数据”“写入数据”三个菜单,并添加消息响应函数OnPipeCreate(),OnPipeRead(),OnPipeWrite()。在CParent
2、View类中增加成员变量HANDLE类型的hRead,hWrite,初始化变量,并在析构函数中释放句柄:§voidCParentView::OnPipeWrite()§{§if(!CreatePipe(…))/*创建匿名管道*/§{§/*显示消息“创建管道失败!”*/§/*退出*/§}§if(!CreateProcess(…))/*创建子进程*/§{§/*关闭句柄hRead、hWrite*/§/*显示消息“创建子进程失败!”*/§/*退出*/§}§}§voidCParentView::OnPipeRead()§{
3、§/*定义一个字符数组,用于存放读取的数据*/§if(!ReadFile(…))/*读取数据*/§{§/*显示消息“读取数据失败!”*/§/*退出*/§}§/*打印读取的数据*/§/*退出*/§voidCParentView::OnPipeWrite()§{§/*定义一个字符数组,用于存放写入的数据*/§if(!WriteFile(…))/*写入数据*/§{§/*显示消息“写入数据失败!”*/§/*退出*/§}§}§B.子进程§建一个Child的单文档,在CChildView中增加两个成员HANDLE型的成员变量
4、hRead,hWrite,并添加消息响应函数OnPipeRead(),OnPipeWrite(),再添加虚函数OnInitialUpdate(),并在析构函数中释放句柄。§voidCChildView::OnInitialUpdate()§{§hRead=GetStdHandle(…)/*获取标准输入句柄*/§hWrite=GetStdHandle(…)/*获取标准输出句柄*/§}§voidCParentView::OnPipeRead()§{§/*定义一个字符数组,用于存放读取的数据*/§if(!ReadFil
5、e(…))/*读取数据*/§{§/*显示消息“读取数据失败!”*/§/*退出*/§}§/*打印读取的数据*/§/*退出*/§}§voidCParentView::OnPipeWrite()§{§/*定义一个字符数组,用于存放写入的数据*/§if(!WriteFile(…))/*写入数据*/§{§/*显示消息“写入数据失败!”*/§/*退出*/§}§}#######################父进程代码#######################voidCFatherView::OnPipeCreate(){
6、//TODO:AddyourcommandhandlercodehereSECURITY_ATTRIBUTESsa;sa.bInheritHandle=TRUE;sa.lpSecurityDescriptor=NULL;sa.nLength=sizeof(SECURITY_ATTRIBUTES);if(!CreatePipe(&hRead,&hWrite,&sa,0)){MessageBox("创建管道失败!");return;}STARTUPINFOsui;PROCESS_INFORMATIONpi;ZeroM
7、emory(&sui,sizeof(STARTUPINFO));//将数据清零sui.cb=sizeof(STARTUPINFO);sui.dwFlags=STARTF_USESTDHANDLES;sui.hStdInput=hRead;sui.hStdOutput=hWrite;sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);if(!CreateProcess("H:\OS作业\Experiment1_匿名管道通信\Child\Debug\child.exe"
8、,NULL,NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi)){CloseHandle(hRead);CloseHandle(hWrite);//关闭句柄,将核对象的使用计数减1,这样当操作系统发现核对象//的使用计数为0时,将清除核对象。hRead=NULL;hWrite=NULL;MessageBox("创建子进程失败!");return;}e
此文档下载收益归作者所有