C++ 名前付きパイプによるプロセス間通信の小さいサンプル | puarts.com
映像・CG・画像処理関連の技術情報、個人作品の創作記録、メモなど
Category

C++ 名前付きパイプによるプロセス間通信の小さいサンプル

公開日: 2016/09/26 | カテゴリ: C/C++ | タグ: C++, サンプル

以前作った GL のアプリケーションをプロセス間通信で外から操作できるようにしたくなったので、第1歩として名前付きパイプを使ったプロセス間通信の Windows 版小 C++ サンプルを作りましたので載せておきます。

サーバー側のプロセス起動後にクライアント側を起動し、サーバー側で文字列を入力すると、クライアント側に出力されるというサンプルです。

サーバー側のコード

#include <Windows.h>
#include <iostream>

void main()
{
    char sendBuffer[256];
    HANDLE pipeHandle = CreateNamedPipe(
        L"\\\\.\\pipe\\mynamedpipe",
        PIPE_ACCESS_OUTBOUND, PIPE_TYPE_MESSAGE,
        1,
        sizeof(sendBuffer),
        sizeof(sendBuffer),
        1000, NULL);
    if (pipeHandle == INVALID_HANDLE_VALUE)
    {
        std::cout << "パイプ作成に失敗" << std::endl;
        return;
    }

    std::cout << "クライアント起動待ち.." << std::endl;
    ConnectNamedPipe(pipeHandle, NULL);

    sendBuffer[0] = '\0';
    do
    {
        std::cout << "送信する文字を入力(Endで終了): ";
        // 入力文字列を送信
        std::cin >> sendBuffer;
        DWORD dwResult;
        WriteFile(pipeHandle, sendBuffer, strlen(sendBuffer) + 1, &dwResult, NULL);
    } while (strcmp(sendBuffer, "End") != 0);

    CloseHandle(pipeHandle);
}

クライアント側のコード

#include <Windows.h>
#include <iostream>

void main()
{
    HANDLE pipeHandle = CreateFile(L"\\\\.\\pipe\\mynamedpipe", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (pipeHandle == INVALID_HANDLE_VALUE)
    {
        std::cout << "パイプ作成に失敗" << std::endl;
        return;
    }

    std::cout << "サーバーから受信開始" << std::endl;

    // 文字列受信
    char recvBuffer[256];    //受信バッファ
    do
    {
        recvBuffer[0] = '\0';
        DWORD recvBuffer;
        ReadFile(pipeHandle, recvBuffer, sizeof(recvBuffer), &recvBuffer, NULL);
        if (recvBuffer[0] == '\0')
        {
            continue;
        }
        recvBuffer[readBytes] = '\0';
        std::cout << "受信: " << recvBuffer << std::endl;
    } while (strcmp(recvBuffer, "End") != 0);

    CloseHandle(pipeHandle);
}

参考
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365592(v=vs.85).aspx


  このエントリーをはてなブックマークに追加  

にほんブログ村 デザインブログ グラフィックアートへ
Links

参考になりそうなブログやサイトを見つけたら勝手にリンクを貼らせてもらっています。
リンク削除を希望の場合はお手数ですがメールにてご一報下さい。
Ke-Sen Huang's Home Page        Disney Research        VIDEO COPILOT        AbandonedArt.org
ryoji ikeda        チームラボ        トルク with AR三兄弟        DAITO MANABE

Copyright(C)2006-2017 wsp All Rights Reserved