没有合适的资源?快使用搜索试试~ 我知道了~
操作系统上机报告.doc
资源推荐
资源详情
资源评论
操作系统上机报告
实验一、匿名管道通信
一、 实验目的
学会创建匿名管道,并且能够利用管道进行进程间的通信。
二、 实验内容
分别建立名为 Parent 的单文档应用程序和 Child 的单文档应
用程序作为父子进程,由父进程创建一个匿名管道,实现父子进
程向匿名管道写入和读取数据。
三、 设计与实现过程
本实验在 VC6.0 上实现
操作系统上机报告
欢迎下载
2
▪ A.父进程
▪ 先建一个 Parent 的单文档应用程序,增加“创建管道”“读取
数据”“写入数据”三个菜单,并添加消息响应函数
OnPipeCreate(),OnPipeRead(),OnPipeWrite()。在
CParentView 类中增加成员变量 HANDLE 类型的 hRead,hWrite,
初始化变量,并在析构函数中释放句柄:
▪ void CParentView::OnPipeWrite()
▪ {
▪ if(!CreatePipe(…)) /*创建匿名管道*/
▪ {
▪ /*显示消息“创建管道失败!”*/
▪ /*退出*/
▪ }
▪ if(!CreateProcess(…)) /*创建子进程*/
▪ {
▪ /*关闭句柄 hRead、hWrite*/
▪ /*显示消息“创建子进程失败!”*/
▪ /*退出*/
▪ }
▪ }
▪ void CParentView::OnPipeRead()
▪ {
▪ /*定义一个字符数组,用于存放读取的数据*/
▪ if(!ReadFile(…)) /*读取数据*/
▪ {
▪ /*显示消息“读取数据失败!”*/
▪ /*退出*/
▪ }
▪ /*打印读取的数据*/
▪ /*退出*/
▪ void CParentView::OnPipeWrite()
▪ {
▪ /*定义一个字符数组,用于存放写入的数据*/
▪ if(!WriteFile(…)) /*写入数据*/
操作系统上机报告
欢迎下载
3
▪ {
▪ /*显示消息“写入数据失败!”*/
▪ /*退出*/
▪ }
▪ }
▪ B.子进程
▪ 建一个 Child 的单文档,在 CChildView 中增加两个成员
HANDLE 型的成员变量 hRead,hWrite,并添加消息响应函数
OnPipeRead(),OnPipeWrite(),再添加虚函数
OnInitialUpdate(),并在析构函数中释放句柄。
▪ void CChildView::OnInitialUpdate()
▪ {
▪ hRead=GetStdHandle(…)/*获取标准输入句柄*/
▪ hWrite=GetStdHandle(…)/*获取标准输出句柄*/
▪ }
▪ void CParentView::OnPipeRead()
▪ {
▪ /*定义一个字符数组,用于存放读取的数据*/
▪ if(!ReadFile(…)) /*读取数据*/
▪ {
▪ /*显示消息“读取数据失败!”*/
▪ /*退出*/
▪ }
▪ /*打印读取的数据*/
▪ /*退出*/
▪ }
▪ void CParentView::OnPipeWrite()
▪ {
▪ /*定义一个字符数组,用于存放写入的数据*/
▪ if(!WriteFile(…)) /*写入数据*/
▪ {
▪ /*显示消息“写入数据失败!”*/
▪ /*退出*/
▪ }
操作系统上机报告
欢迎下载
4
▪ }
#######################父进程代码#######################
void CFatherView::OnPipeCreate()
{
// TODO: Add your command handler code here
SECURITY_ATTRIBUTES sa;
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("创建管道失败!");
return;
}
STARTUPINFO sui;
PROCESS_INFORMATION pi;
ZeroMemory(&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",NULL,NULL,NULL,TRUE,0,NULL,NU
LL,&sui,&pi))
{
CloseHandle(hRead);
CloseHandle(hWrite);//关闭句柄,将内核对象的使用计数减
1,这样当操作系统发现内核对象
//的使用计数为 0 时,将清除内核对象。
hRead=NULL;
hWrite=NULL;
MessageBox("创建子进程失败!");
return;
剩余21页未读,继续阅读
资源评论
是空空呀
- 粉丝: 174
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功