/* namedpcl */ #define EVENTNAME "Nekodemowakaru" #include <windows.h> #include <stdio.h> #include <conio.h> HANDLE hEvent, hFile; int main() { char szBuf[1024]; DWORD dwWritten; hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, EVENTNAME); if (hEvent == NULL) { printf("Error OpenEvent\n"); _getch(); return -1; } hFile = CreateFile("\\\\.\\pipe\\mypipe", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if (hFile == INVALID_HANDLE_VALUE) { printf("パイプをオープンできませんでした\n"); CloseHandle(hFile); _getch(); return -2; } while (1) { printf("送信文---"); gets(szBuf); if (strcmp(szBuf, "end") == 0) { SetEvent(hEvent); WriteFile(hFile, szBuf, (int)strlen(szBuf), &dwWritten, NULL); break; } SetEvent(hEvent); WriteFile(hFile, szBuf, (int)strlen(szBuf), &dwWritten, NULL); } if (CloseHandle(hFile)) { printf("ファイルハンドルをクローズしました\n"); } printf("イベントを待っています...\n"); WaitForSingleObject(hEvent, INFINITE); printf("イベントがシグナル状態になったので終了します\n"); printf("何かキーを打ってください\n"); _getch(); return 0; }まずは、サーバー側で作ったイベントをオープンしてイベントハンドルを取得します。 次に、CreateFile関数でパイプをオープンします。
無限ループに突入します。
gets関数で書き込み文字列を取得します。
そして、書き込まれた文字列が「end」ならイベントをシグナル状態にしてループを抜けます。
書き込まれた文字列が「end」でない場合は、やはりイベントをシグナル状態にして、WriteFile関数でパイプに書き込みます。(サーバー側で書き込まれた文字列を表示したら イベントは非シグナル状態に戻しています。)
そして、ユーザーの入力を待ちます。
さて、ループを抜けたらファイルハンドルを閉じます。
そして、イベントがシグナル状態になるのを待ちます。
シグナル状態になったらプログラムを終了します。
一つのイベントをサーバー側とクライアント側で利用している点に注意してください。
Update Feb/26/2006 By Y.Kumei