C++:进程间通讯(部分转载,个人整理)

/**
 * 主题:多线程和多进程技术
 *
 */
Q1: C++进程间通讯的方式
    管道(命名管道,匿名管道),socket,事件event,共享内存,消息队列
    
实例:命名管道实例

/**
 * 方案如下所示
 * 管道服务端:CreateNamedPipe(创建管道HANDLE hPipe) -> ConnectNamedPipe(连接客户端)-> (WriteFile)往管道写数据/(readFile)往管道读数据
 * 管道客户端: WaitNamedPipe(等待命名管道实例有效,设置超时时间) -> CreateFile(打开管道,返回命名管道句柄) -> (WriteFile)往管道写数据/(readFile)往管道读数据
 * 小结:api函数:CreateNamePipe,ConnectNamedPipe,WaitNamedPipe.CreateFile,WriteFile,ReadFile
 */
 
 
#include "stdafx.h"  
#include <stdio.h>  
#include <windows.h>  
#include <ctime> 

int main(int argc,_TCHAR *argv[])
{
    srand(time(NULL));
    
    char buf[256] = "";
    DWORD rlen = 0;
    
    HANDLE hPipe = CreateNamedPipe(
            TEXT("\\\\.\\Pipe\\mypipe"),                        //管道名       
            PIPE_ACCESS_DUPLEX,                                 //管道类型   
            PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,  //管道参数  
            PIPE_UNLIMITED_INSTANCES,                           //管道能创建的最大实例数量  
            0,                                                  //输出缓冲区长度 0表示默认  
            0,                                                  //输入缓冲区长度 0表示默认  
            NMPWAIT_WAIT_FOREVER,                               //超时时间  
            NULL);
     
    if(INVALID_HANDLE_VALUE == hPipe)
    {
        printf("Create Pipe Error(%d)\n",GetLastError()); 
    }
    // 创建命名管道成功
    else
    {
        //阻塞等待客户端连接
        printf("Waiting For Client Connection...\n");  
        
        if(ConnectNamedPipe(hPipe,NULL) == null)
        {
            printf("Connection failed!\n");   
        }
        else
        {
            printf("Connection Success!\n");  
        }
        
        // 进程间数据通讯
        while(true)
        {
            // 接收客户端发送过来的内容
            if(ReadF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值