zoukankan      html  css  js  c++  java
  • 进程间通信

    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;
    }
  • 相关阅读:
    Java中的流
    多种日志收集工具比较
    UML类图几种关系的总结
    从数组中找出第K大的数
    数组各种排序算法和复杂度分析
    时间复杂度和空间复杂度
    Java Classloader原理分析
    WebSocket
    TCP/IP详解--TCP连接中TIME_WAIT状态过多
    TCP协议
  • 原文地址:https://www.cnblogs.com/jackStudy/p/5092466.html
Copyright © 2011-2022 走看看