命名管道客户端

ms-help://MS.MSDNQTR.v90.chs/ipc/base/named_pipe_client.htm
 
#include <windows.h> 
#include <stdio.h>
#include <conio.h>
#include <tchar.h>

#define BUFSIZE 512
 
int _tmain(int argc, TCHAR *argv[]) 
{ 
   HANDLE hPipe; 
   LPTSTR lpvMessage=TEXT("Default message from client"); 
   TCHAR chBuf[BUFSIZE]; 
   BOOL fSuccess; 
   DWORD cbRead, cbWritten, dwMode; 
   LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\mynamedpipe"); 

   if( argc > 1 )
      lpvMessage = argv[1];
 
// Try to open a named pipe; wait for it, if necessary. 
 
   while (1) 
   { 
      hPipe = CreateFile(lpszPipename,   // pipe name 
         		 GENERIC_READ |  // read and write access 
                         GENERIC_WRITE, 
                         0,              // no sharing 
                         NULL,           // default security attributes
                         OPEN_EXISTING,  // opens existing pipe 
                         0,              // default attributes 
                         NULL);          // no template file 
 
   // Break if the pipe handle is valid. 
 
      if (hPipe != INVALID_HANDLE_VALUE) 
         break; 
 
      // Exit if an error other than ERROR_PIPE_BUSY occurs. 
 
      if (GetLastError() != ERROR_PIPE_BUSY) 
      {
         printf("Could not open pipe"); 
         return 0;
      }
 
      // All pipe instances are busy, so wait for 20 seconds. 
 
      if (!WaitNamedPipe(lpszPipename, 20000)) 
      { 
         printf("Could not open pipe"); 
         return 0;
      } 
   } 
 
// The pipe connected; change to message-read mode. 
 
   dwMode = PIPE_READMODE_MESSAGE; 
   fSuccess = SetNamedPipeHandleState( 
      hPipe,    // pipe handle 
      &dwMode,  // new pipe mode 
      NULL,     // don't set maximum bytes 
      NULL);    // don't set maximum time 
   if (!fSuccess) 
   {
      printf("SetNamedPipeHandleState failed"); 
      return 0;
   }
 
// Send a message to the pipe server. 
 
   fSuccess = WriteFile(hPipe,                  // pipe handle 
      			lpvMessage,             // message 
      			(lstrlen(lpvMessage)+1)*sizeof(TCHAR), // message length 
      			&cbWritten,             // bytes written 
      			NULL);                  // not overlapped 
   if (!fSuccess) 
   {
      printf("WriteFile failed"); 
      return 0;
   }
 
   do 
   { 
   // Read from the pipe. 
 
      fSuccess = ReadFile(hPipe,    // pipe handle 
         		  chBuf,    // buffer to receive reply 
                          BUFSIZE*sizeof(TCHAR),  // size of buffer 
                          &cbRead,  // number of bytes read 
                          NULL);    // not overlapped 
 
      if (! fSuccess && GetLastError() != ERROR_MORE_DATA) 
         break; 
 
      _tprintf( TEXT("%s\n"), chBuf ); 
   } while (!fSuccess);  // repeat loop if ERROR_MORE_DATA 

   getch();
 
   CloseHandle(hPipe); 
 
   return 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值