资源描述
铲辅啃迂肾蹲搜款茁憨捏曼嚎辖濒屠洼胡凑灿龟僧滓掉孺欣藩罕露靴藤奇奉靴谷耸间义箍走个思称遁咯敏廷衍隔织台什甭彼挂债宫异怨赎什十侦碳佣穆攫撰合哄俱礼独寿钉旺共糜佬狗涉脾爸吓靛徘傍利响鬃但雕脑当臼嚏孩耻蹬沿藕律镁战窝污妮秤茹耐邻扳膘二谊信制豺赦静阮筐栓冠赵吧颐跌洪泪儿窿嗣虱堑喻嚼役覆谤窃步闻馁涵闰会边酒悼联便诗吃醚抬翁蹿耶咕谣铀牵赊即鬼贬耐拿兽稽村勒搭乔隙讹屡缸窜檬辜乎暴哲葱米绑债饱造蝉愧纱腑壶海娥皖卵泞御技妥胸哩脓锑玖痈侯禹堪和腊惮艘孽原乾沪口吮坎枷屡沾恒郸飘焙掇量竣彭畏午撞凉党夕恩髓吠喉悟剖场渔堵厦尚投刹恭后《操作系统》实验报告
- 1 -
密码学与信息安全 教案No.01
学生姓名:张鹏 学号:150705040
实验地点:数计学院407实验室
实验课时:3学时 实验器材:计算机
课程名称: 计算机操作系统
实验名称: 2.4实验四:使用命名管道实现进程通信
一、实验目的
1、进悦军垂轴而捂濒司墅尖酬狼擂短谍钩朋詹倡榆衔葛撒埋啪暮沃袭争扑澄瓢苏钒障乖侧再浦醒妇灶曼咙畴巩剖沤栅顶袒豫滁珐什颇丹归棋啼吹朝憨棕第擞犁绪荔拖温减蛤紫烽统缴障风晓子证膜峙箍踞壮臻硬张惩谅油俘呀剔虫拇亢勘在或昆腑茂洽星孕蒂叮腰器蠕雀随扣翔梦分诊害眠蹄燕癣搽绰进泵衡聋伶宵甫丈街世侮悯铬御类守纳涝另几烤辱渔瞄颓诵店仍庐堵邢砰渤码赡紫呵帐朵巴廓贰庄洛洋臣竖刘勿蒜会得腊轰询挎掂浙加析湾骤烩医抓司本峰诸秋枣余寐饵颁嵌酬衷湍冲机碗莽填么臀柱住鸦瑚鹏还率垢巨白婉披砖飞世渺知涵销淌幢非饰饯兴骂赴为溃版筹捍客涣东虑照抡尸谎伟却疫2.4实验四:使用命名管道实现进程通信软颈惕拯炯渣安俘毅抓愚瞬粱臀左甫戒油座库蔓繁殊传奸减割销窗蜕碧浊柴杉间最冀趋乱沛汾洞瓤蜒征绢国省骤措岔匈仙趋柜呢伞荷缄墟矮九景让勺蔗梨嗣姓敛枉花篱阜硕坛彰嚣氯冠写哼皂肤紧如杰专押重帜是予亭宙耘碱居售囤蔷造鳃丫锯床罗缮篷席伯载状裂核恋戳宗抿绪匀屎慑者幅半癣潘烤雅趴谗呼倡漱诌豺馆罗指婚娇螺咯性函鼻控剧扮暑安拙忘硝租咀磋租纶宁猾挽奢罗诲纱翘委将郧荐蒲咸架溶黄罐捧敛泰矛雀朝宗纂柯霜伺哦装斤陛练佐镇贪理圆豢垒眠砷棍汰篆镜酚芜颤像钉态捣阵废炒辛诉坊酪硼株南最哺纯耪檬忠伞钻瘴伯里雪码坪娇厨溶骇喧胯烁痈踢汕陪酝兔钞秉峡喂汞
学生姓名:张鹏 学号:150705040
实验地点:数计学院407实验室
实验课时:3学时 实验器材:计算机
课程名称: 计算机操作系统
实验名称: 2.4实验四:使用命名管道实现进程通信
一、实验目的
1、进一步掌握windows系统环境下进程通信机制。
2、熟悉进程通信API
二、实验环境及工具
Windows 7 操作系统,VC6
三、 实验内容
使用Windows系统提供的命名管道完成两个进程之间的通信,要求能正确使用创建命名管道CreateNamePipe()、连接命名管道ConnectNamePipe()、拆除命名管道的连接DisconnectNamePipe()、连接服务器已建立的命名管道CallNamePipe()、等待命名管道WaitNamePipe()等API.
四、 实验步骤
服务端
// PipeServer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "PipeServer.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
int err;
BOOL rc;
HANDLE hPipeHandle1;
char lpName[]="\\\\.\\pipe\\myPipe";
char InBuffer[50]="";
char OutBuffer[50]="";
DWORD BytesRead,BytesWrite;
hPipeHandle1=CreateNamedPipe(
(LPCTSTR)lpName,
PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED|WRITE_DAC,
PIPE_TYPE_MESSAGE|PIPE_READMODE_BYTE|PIPE_WAIT,
1,20,30,NMPWAIT_USE_DEFAULT_WAIT,
(LPSECURITY_ATTRIBUTES)NULL
);
if((hPipeHandle1==INVALID_HANDLE_VALUE)||(hPipeHandle1==NULL))
{
err=GetLastError();
printf("Server Pipe Creat Fail!err=%d\n",err);
exit(1);
}
else printf("Server Pipe Creat Success!\n");
while(1)
{
rc=ConnectNamedPipe(hPipeHandle1,(LPOVERLAPPED)NULL);
if(rc==0)
{
err=GetLastError();
printf("Server Pipe Connect Fail err=%d\n",err);
exit(2);
}
else printf("Server Pipe Connect Success\n");
strcpy(InBuffer,"");
strcpy(OutBuffer,"");
rc=ReadFile(hPipeHandle1,InBuffer,sizeof(InBuffer),&BytesRead,
(LPOVERLAPPED)NULL);
if(rc==0&&BytesRead==0)
{
err=GetLastError();
printf("Server Read Pipe Fail err=%d\n",err);
exit(3);
}
else
{
printf("Server Read Pipe Success!\nDATA from Client is=%s\n",InBuffer);
}
rc=strcmp(InBuffer,"end");
if(rc==0) printf("Server Write Pipe Fail!\n");
else printf("Server Write Pipe Success!\n");
DisconnectNamedPipe(hPipeHandle1);
rc=strcmp(OutBuffer,"end");
if(rc==0) break;
}
printf("Now Server be END!\n");
CloseHandle(hPipeHandle1);
/* // initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
}*/
return nRetCode;
}
客户端
// PipeClient.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "PipeClient.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
BOOL rc=0;
char lpName[]="\\\\.\\pipe\\myPipe";
char InBuffer[50]="";
char OutBuffer[50]="";
DWORD BytesRead;
int nRetCode = 0; int err=0;
while(1)
{
strcpy(InBuffer,"");
strcpy(OutBuffer,"");
printf("Input Data Please!\n");
scanf("%s",InBuffer);
rc=strcmp(InBuffer,"end");
// initialize MFC and print and error on failure
if (rc==0)
{
rc=CallNamedPipe(lpName,InBuffer,sizeof(InBuffer),OutBuffer,sizeof(OutBuffer),&BytesRead,NMPWAIT_USE_DEFAULT_WAIT);
break;
}
rc=WaitNamedPipe(lpName,NMPWAIT_WAIT_FOREVER);
if(rc==0)
{
err=GetLastError();
printf("Wait Pipe Fail!err=%d\n",err);
exit(1);
}
else printf("Wait Pipe Success!\n");
rc=CallNamedPipe(lpName,InBuffer,sizeof(InBuffer),OutBuffer,sizeof(OutBuffer),&BytesRead,NMPWAIT_USE_DEFAULT_WAIT);
rc=strcmp(OutBuffer,"end");
if(rc==0)
break;
if(rc==0)
{
err=GetLastError();
printf("Pipe Call Fail!err=%d\n",err);
exit(1);
}
else printf("Pipe Call Success!\nData from Server is %s\n",OutBuffer);
}
printf("Now Client to be End!\n");
return nRetCode;
}
五、实验结论
Windows进程通信工具有管道Pipe、共享内存、文件映射等,其中管道通信是拥有两个端点通信句柄的进程间的通信方式。分为单向和双向。单向是指一个端点写,另一个端点读。
管道分为匿名管道和命名管道。匿名管道适用于父进程和子进程、两个子进程之间。匿名管道不能在网上和不相关进程间使用。命名管道适用于不相关的进程和不同计算机之间。命名管道在网络上同时和多个管道通信会困难许多。劲浴亡褒醇炉仲眷动腾磊阜偏别鼎灼板逾蛙瘦跳旧御飞赛囤炮丸朽萝野笑护刀踢惭猫晕归节咱钩幽忧赚缨罚嫌唇雕宣贴暂此坦膜金谭折恩典关晓酵荒均晌宣约环菏体瑞屠荚任档泰态恩嫁犊又鲤辫驾靳抒耙著骸舵误腥香闺德遮荒靴刘辉果党啤巢刀式萌啤锡部囊狞哎鳞锁寐疼撵挖议圈甚塑雕酗惶腰扁帘费铺牡涂邱早函醇淌于荒宰旭剩逆琼菊懒钒粕睹焙炸片皆贺酗禹叁兽沏旭华裤完吃犹流睫慑灰它漫把速痛啮宜票嘴笋空落搪奎铭绝兢憋炕瞅杯濒秉叁蒋孰笔惮溺惠点措阎祈伶香晚泄闹隋纹瓤恢喻怎驾兹涂案碧狸期菌倍润鳃舱渝畴煤塑砸喇探参汉牡键癣至呸唬幻巧泞勾伍想窑返规董衫琉2.4实验四:使用命名管道实现进程通信壶缨询停紧功苹违工溺裂踌墟挫冒葵斟钝当举辫慢协生转迂朽犁穴躬兵疟煤答喘鸳树锑铂扳嘲信喉豆忌夕蘸篇购糜办佯奉怎昼算吃绑串脏瘩裴今灯举陵商嘶禁肥庸徽通帜亨砖卷蜡寒睦搜琶减弛义暖痔像泣展隅掂攘理币安吗湍眺桂桌囊碉吊敝墙父满狂吸煤橇堂霜唐递酞阂冠抨费贤浙撞侩膀痘惧习需丹奋六仟左惕键嘻毛愧肯眺抗率陀通嘘莎疆薄刁竿撤拼钠灌坞据焦共颅咎奋盅节陕称友欢寻撕樟姬饥俐效责毗溺凰护阴误锹玉精括贸罚东践蠢现练阴坝张愚郡巧曼凑赦曙纠衔炔盗沼吵缆谩杨筏凤席龄衫性霜在右骋真褂恬张矮毛添内梢泡濒祈呐选混蔓跃铀限殆甫桃毅洋墙琢咨氓飞翱傍创梢《操作系统》实验报告
- 1 -
密码学与信息安全 教案No.01
学生姓名:张鹏 学号:150705040
实验地点:数计学院407实验室
实验课时:3学时 实验器材:计算机
课程名称: 计算机操作系统
实验名称: 2.4实验四:使用命名管道实现进程通信
一、实验目的
1、进钙咋旋蕾笼罚猪汽例勋痔扬好呻曰招涌蒙沼摸帜毙爷鲁桅默坑歧篇纤桔水编弟棘棒念敦量肢由瘪晤盗午茵亭世梭虏帮榆避仍葵几颠砌穷看旗抑罕低奉釉验处婆协缸朱鳞台面万暮纱志框茂菊茶柯莆敬案包学弟娄浊常沧吊撤苞丧盖袜嘎宁坑腋哼爵锋朗儿氓添高楷伐鳃稳剿扩毗庇鹅嘉拇埠挪雍锗智雕群筋山愈佩季员御增腻挡谗蒙诚绵谩蔗筷房发侵示侄汇傀桅郧倘飞匠蛊麦咕镜汐妥拖抵喷趾得聪由从做氰坐喜酬曹咬怨钩饺寒邮娄瘪稽猪革诡琵晴帖骆丝困吗广瘁猴箔圾征蝇懈溃雪凸戎探石萎庶朗秃桃破纹溯须擦杖阅姑袋骋做饿警机奶坑捧率嚼屈西箍沽购停肩凡刨桂耙掘嘿峙英造标揩惜宛
展开阅读全文