今回は、送信側プロセスを作ります。これは、特に目新しいものはありません。
CreateFile関数で、ファイル名をメールスロットの名前にします。
ここでは、前章で作ったメールスロットと同じ名前にします。
3番目の引数を必ずFILE_SHARE_READにします。
たったこれだけです。
では、プログラムを見てみましょう。
/* mailslot02.c */
#include <windows.h>
#include <stdio.h>
int MyWrite();
char szMailSlot[] ="\\\\.\\mailslot\\mymail";
int main()
{
char szNo[8];
int nNo;
BOOL bEnd = FALSE;
while (1) {
printf("**** MENU ****\n");
printf("1.書き込み\n");
printf("0.終了\n");
printf("**************\n");
printf("\n");
printf("番号選択-->");
gets(szNo);
nNo = atoi(szNo);
switch (nNo) {
case 1:
MyWrite();
break;
case 0:
bEnd = TRUE;
break;
default:
printf("不正な番号です\n");
continue;
}
if (bEnd)
break;
}
return 0;
}
int MyWrite()
{
char szBuf[1024];
HANDLE hFile;
BOOL bResult;
DWORD dwWritten;
hFile = CreateFile(szMailSlot, GENERIC_WRITE,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE) {
printf("メールスロットがありません\n");
return -1;
}
printf("書き込み-->");
gets(szBuf);
strcat(szBuf, "\r\n");
bResult = WriteFile(hFile, szBuf, (int)strlen(szBuf) + 1, &dwWritten, NULL);
if (bResult == FALSE) {
printf("Error WriteFie\n");
CloseHandle(hFile);
return -2;
}
CloseHandle(hFile);
return 0;
}
このプログラムのみを起動して、「1.書き込み」を選択すると
「メールスロットがありません」と言われます。
前章で作った、読み取り用のプログラムを起動しておくと、書き込みができます。
読み取り側のプログラムに、メッセージが届いていますね。
Update Aug/29/2005 By Y.Kumei