• 进程间通信


    1、邮槽

    #include <Windows.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    
    /*
      邮槽  服务端
      注意: 先启动服务端
    
    
      邮槽是一种windows系统提供的一种单项通信的机制,单工,邮槽传输的数据非常小,一般在400kb
      如果数据过大,可能导致邮槽不能正常工作
    */
    
    
    int main()
    {
    
        HANDLE mail2;
        char text[]= "你好,this is a mailslot message test";
        DWORD writeText;
        mail2 = CreateFile("\\.\mailslot\myslot",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
        if(INVALID_HANDLE_VALUE == mail2)
        {
            cout<<"打开邮槽失败!"<<endl;
        }else
        {
            if(WriteFile(mail2,text,sizeof(text),&writeText,NULL))
            {
                ::Sleep(1000);
                cout<<"数据写入成功!"<<endl;
            }else
            {
                cout<<"数据写入失败!"<<endl;
            }
            CloseHandle(mail2);
        }
    
        ::Sleep(10000);
        return 0;
    }
    #include <Windows.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    /*
      邮槽  客户端
    */
    
    int main()
    {
    
        HANDLE mail;
        mail = ::CreateMailslot("\\.\mailslot\myslot",0,MAILSLOT_WAIT_FOREVER,NULL); //定义邮槽句柄
        if(mail == INVALID_HANDLE_VALUE)
        {
            cout<<"创建邮槽失败!"<<endl;
            CloseHandle(mail);
        }else
        {
            cout<<"创建邮槽成功!,正在读取数据...."<<endl;
            char szText[200];
            DWORD readText;
            if(ReadFile(mail,szText,200,&readText,NULL)) //读取数据
            {
                cout<<szText<<endl;
            }else
            {
                cout<<"读取数据失败"<<endl;
            }
    
        }
        
        CloseHandle(mail); //关闭邮槽
        Sleep(10000);
    
        return 0;
    }

    2、命名管道

    #include <Windows.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    
    int main()
    {
        HANDLE hPip;          //命名管道句柄
        OVERLAPPED ovi = {0}; //定义结构体变量
        char buf[200];
        DWORD readbuf;
        hPip = CreateNamedPipe("\\.\pipepipename",PIPE_ACCESS_DUPLEX,
            PIPE_TYPE_BYTE,PIPE_UNLIMITED_INSTANCES,1024,1024,0,NULL);
        cout<<"创建管道成功,正在等待客户端连接!"<<endl;
        if(::ConnectNamedPipe(hPip,&ovi)) //阻塞式?
        {
            cout<<"客户端连接成功"<<endl;
            cout<<"正在读取数据..."<<endl;
            if(ReadFile(hPip,buf,200,&readbuf,NULL))
            {
                cout<<"数据读取成功"<<endl;
                cout<<"读取的数据是: "<<buf<<endl;
            }else
            {
                cout<<"数据读取失败!"<<endl;
            }
        }
    
    
        cin.get();    
    
        return 0;
    }
    #include <Windows.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    
    int main()
    {
        HANDLE hPip;
        OVERLAPPED ovi = {0}; //初始化结构体
        ZeroMemory(&ovi,sizeof(OVERLAPPED));
        char buf[] = "命名管道测试程序";
        DWORD readbuf;
        cout<<"正在连接命名管道!"<<endl;
    
        if(WaitNamedPipe("\\.\pipe\pipename",NMPWAIT_WAIT_FOREVER)) //连接命名管道
        {
            hPip = CreateFile("\\.\pipe\pipename",GENERIC_READ|GENERIC_WRITE,0,
                NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  //打开指定命名管道
            if(hPip == INVALID_HANDLE_VALUE)
            {
                cout<<"打开命名管道失败!"<<endl;
            }else
            {
                //写入数据到命名管道
                if(WriteFile(hPip,buf,sizeof(buf),&readbuf,NULL))
                {
                    cout<<"数据写入成功!"<<endl;
                }else
                {
                    cout<<"数据写入失败!"<<endl;
                }
            }
        }else
        {
            cout<<"连接命名管道失败!"<<endl;
        }
    
    
        cin.get();    
        return 0;
    }
  • 相关阅读:
    Android studio怎么创建shape的XML文件
    请问如何在PS中将一张图标里的各个小图标分离成一个个图标?
    IOS 开发之 -- 过滤掉字符串里面所有的非法字符 字典和json之间的互转
    ios开发之 -- 5分钟集成融云的客服功能
    ios开发之 --调用系统的页面,显示中文
    IOS 开发之-- textfield和textview,return键的改变,点击return键
    IOS 开发之--获取真机的deviceToeken
    iOS 开发之--使用AFNetWorking3.1.0上传单张/多张图片
    iOS 开发之--打测试包的时候报错的解决方法
    ios开发之 -- 调用系统定位获取当前经纬度与地理信息
  • 原文地址:https://www.cnblogs.com/jackStudy/p/5092466.html
Copyright © 2020-2023  润新知