CreateMailslot

https://msdn.microsoft.com/ja-jp/library/aa379560.aspx https://msdn.microsoft.com/ja-jp/library/cc428944.aspx https://msdn.microsoft.com/ja-jp/library/cc429198.aspx https://msdn.microsoft.com/ja-jp/library/cc428944.aspx https://msdn.microsoft.com/ja-jp/library/cc429198.aspx https://msdn.microsoft.com/ja-jp/library/aa379560.aspx https://msdn.microsoft.com/ja-jp/library/cc429856.aspx
ここに掲載されている内容は、コンテンツ提供時の情報で、以前は有効であったリンクやURLが現在無効になっている場合や、技術情報が最新の情報と異なる場合がありますのでご了承ください。
最新の情報については、Platform SDK: Interprocess Communications (英語)または、http://msdn.microsoft.com/library/en-us/ipc/base/interprocess_communications.asp をご覧ください。

指定された名前を持つメールスロットを作成し、メールスロットサーバーがそのメールスロットを操作するために利用できるハンドルを返します。メールスロットは、そのメールスロットを作成したコンピュータから見てローカルになります。指定された名前のメールスロットが既に存在している場合は、エラーになります。

HANDLE CreateMailslot(
  LPCTSTR lpName,                            // メールスロット名
  DWORD nMaxMessageSize,                     // 最大メッセージサイズ
  DWORD lReadTimeout,                        // 読み取りタイムアウトの間隔
  LPSECURITY_ATTRIBUTES lpSecurityAttributes // 継承オプション
);

パラメータ

lpName
[入力]メールスロットの名前を指定する、null で終わる文字列へのポインタを指定します。この名前は、次の形式でなければなりません。

\\.\mailslot\[path]name

name フィールドは一意でなければなりません。メールスロット名には、円記号(\)で区切った複数の擬似的なディレクトリを含めることができます。たとえば、「\\.\mailslot\example_mailslot_name」と「\\.\mailslot\abc\def\ghi」は、いずれも有効な名前です(abc などのディレクトリ名がファイルシステム内に存在している必要はありません)。

nMaxMessageSize
[入力]メールスロットに書き込める 1 つのメッセージの最大長を、バイト単位で指定します。任意のサイズのメッセージを書き込めることを指定したい場合、このパラメータを 0 に設定します。
lReadTimeout
[入力]メッセージ読み取りのタイムアウト値を、ミリ秒(1,000 分の 1 秒)単位で指定します。次の値には特別な意味があります。
意味
0 メッセージが存在しないときは、即座に制御を返します( この場合、エラーにはなりません)。
MAILSLOT_WAIT_FOREVER メッセージが送信されるまで待ち続けます。

このタイムアウト値は、それ以降のすべての読み取り操作と継承されたすべてのメールスロットハンドルへ適用されます。

lpSecurityAttributes
[入力] 構造体へのポインタを指定します。この構造体の bInheritHandle メンバは、返されたハンドルを子プロセスが継承するかどうかを決定します。lpSecurityAttributes が NULL の場合、そのハンドルは継承できません。この構造体の lpSecurityDescriptor メンバは無視されます。

戻り値

関数が成功すると、メールスロットのハンドルが返ります。このハンドルはサーバーのメールスロット操作に利用できます。ハンドルのサーバー側はオーバーラップ( 重なり合う)します。

関数が失敗すると、INVALID_HANDLE_VALUE が返ります。拡張エラー情報を取得するには、 関数を使います。

解説

次の条件のいずれかが成立するまでは、メールスロットは存続します。

CloseHandle 関数を使って、メールスロットへの最後のハンドル( おそらく継承されたハンドルまたは重複ハンドル)を閉じる。

•最後のハンドル( おそらく継承されたハンドルまたは重複ハンドル)を所有するプロセスが終了する。

システムは 2 番目の方法を使ってメールスロットを破棄します。

メールスロットにメッセージを書き込むには、次の形式のいずれかでメールスロット名を指定し、 関数を呼び出します。

形式 使用法
\\.\mailslot\name ローカルメールスロットのクライアントハンドルを取得します。
\\computername\mailslot\name リモートメールスロットのクライアントハンドルを取得します。
\\domainname\mailslot\name 指定したドメイン内にある、指定した名前を持つすべてのメールスロットに対するクライアントハンドルを取得します。
\\*\mailslot\name システムのプライマリドメイン内にある、指定した名前を持つすべてのメールスロットに対するクライアントハンドルを取得します。

CreateFile でドメインを指定するか、アスタリスク形式を使ってシステムのプライマリドメインを指定した場合、アプリケーションはメールスロットに対して一度に 424 バイトを超える書き込みを行えません。424 バイトを超える書き込みを行おうとすると、WriteFile 関数は失敗し、 関数は ERROR_BAD_NETPATH を返します。

CreateFile 関数を使ってメールスロットのハンドルを取得するときは、FILE_SHARE_READ フラグを指定しなければなりません。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダーファイル:Winbase.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Kernel32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装

参照

CloseHandle, , GetMailslotInfo, , SetMailslotInfo,

表示: