これは、特に目新しいものはありません。
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