ロゴ メインコンテンツへ
RSSフィード
「ソフトウェア開発」に関連する記事一覧

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

2016/09/26
(この記事の文字数: 268)

以前作った 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


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

<<「ソフトウェア開発」の記事一覧に戻る

コメント(0 件)



コンテンツロード: 0.0079 sec
Copyright(C)2006-2024 puarts All Rights Reserved