2.4实验四:使用命名管道实现进程通信

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学生姓名:张鹏学号: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_W AIT,

1,20,30,NMPWAIT_USE_DEFAULT_WAIT,

(LPSECURITY_A TTRIBUTES)NULL

);

if((hPipeHandle1==INV ALID_HANDLE_V ALUE)||(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!\nDA TA 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.

相关文档
最新文档