Win32の名前付きパイプのAPI - Access Module

Teradata® Tools and Utilities Access Moduleリファレンス

Product
Access Module
Release Number
16.20
Published
2019年9月
Language
日本語
Last Update
2020-01-29
dita:mapPath
ja-JP/igy1527114222333.ditamap
dita:ditavalPath
ja-JP/igy1527114222333.ditaval
dita:id
B035-2425
Product Category
Teradata Tools and Utilities

名前付きパイプに書き込みを行なうWin32のクライアント アプリケーションを作成する場合は、名前付きパイプ サーバーによって名前付きパイプが作成される方法を理解しておく必要があります。 これを理解しておくことが、クライアント アプリケーションのCreateFile()システム コールに該当するオプションをコーディングできるようにするために重要です。

Win32 Named Pipes Access Moduleは、名前付きパイプを以下のシステム コールによって作成します。

CreateNamedPipe(PipeName, // Pipe name
                     PIPE_ACCESS_INBOUND, // Open mode
                     PIPE_TYPE_BYTE,      // pipe mode
                     4,            // Number of instances
                     BuffSize,     // output buffer size
                     BuffSize,     // input buffer size
                     100,// default timeout in milliseconds
                     NULL); // pointer to security attributes
次のような場合に当てはまります。
  • PipeNameは、\\.\pipe\pipenameの書式の任意の文字列にすることができます。
  • pipenameは、クライアント側とサーバー側の両アプリケーションの間で合意されたパイプ名を指定します。
  • BuffSizeは、初期化文字列のBlock_sizeパラメータで指定されたバイト数の2倍の値です。

アクセス モジュールではデータをクライアントからサーバーに流すことしかできないため、ユーザーが開発したクライアント アプリケーションは、CreateFile()システム コールでGENERIC_WRITE(GENERIC_READではなく)オプションをコード化する必要があります。

例: Win32の名前付きパイプのAPI

HANDLE hPipe =
CreateFile(PipeName,// pipe name
  GENERIC_WRITE,// write access
  0,              // no sharing
  NULL,           // no security attributes
  OPEN_EXISTING,  // opens existing pipe
  0,              // default attributes
  NULL);          // no template file

または、クライアント ユーティリティは、標準の'C'ストリームI/Oを使用して、以下のようにパイプを開くことができます。

FILE *fp = fopen(PipeName, "wb");

アクセス モジュールは、名前付きパイプ サーバーとして、パイプへの接続と同期ブロックI/Oを使用したパイプからの読み取りの両方を行ないます。クライアントは、同期的または非同期的に自由にパイプに書き込むことができます。

アクセス モジュールは、パイプを流れるデータにメッセージ構造を必要としません。 このため、クライアント アプリケーションは、名前付きパイプにバイト ストリームまたはメッセージ ストリームとして書き込むことができます。これは、アクセス モジュールが常にバイト ストリームとしてパイプから読み取りを行なうためです。

Win32名前付きパイプのプログラミングの詳細については、Microsoft Developer Networkライブラリ オンライン (Microsoft開発者ネットワーク オンライン ライブラリ)で、Platform SDK (SDKプラットフォーム)の項目にある"Named Pipes (名前付きパイプ)"の解説を参照してください。