第117章 メールスロット その2


今回は、送信側プロセスを作ります。

これは、特に目新しいものはありません。

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.書き込み」を選択すると 「メールスロットがありません」と言われます。



前章で作った、読み取り用のプログラムを起動しておくと、書き込みができます。



読み取り側のプログラムに、メッセージが届いていますね。




[Index][総合Index] [Previous Chapter] [Next Chapter]

Update Aug/29/2005 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。