Windows IO方式之重疊IO

最近要寫一個串口程序,因此對windows的IO方式進行了簡單的複習。簡要的來講windows 的IO方式分爲兩種:同步和異步。而咱們要說的重疊IO是屬於異步IO方式的。如今windows 支持的系統對象包括文件,管道,串口,網絡等。接下來咱們先用管道來描述重疊IO的操做流程。 windows

重疊IO只要是依賴OVERLAPPED這個結構體: 網絡

typedef struct _OVERLAPPED {
    ULONG_PTR Internal;
    ULONG_PTR InternalHigh;
    union {
        struct {
            DWORD Offset;
            DWORD OffsetHigh;
        };
        PVOID Pointer;
    };
    HANDLE  hEvent;
} OVERLAPPED, *LPOVERLAPPED;

 重疊IO 有名管道流程: app

(1)建立有名管道 CreateNamedPipeA(pipeName, PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED, 異步

            PIPE_TYPE_BYTE|PIPE_READMODE_BYTE,
            1,
            0,
            0,
            1000,
            NULL
            );打開模式必須指定FILE_FLAG_OVERLAPPED spa

(2)建立事件CreateEvent(NULL, TRUE, FALSE, NULL);把事件句柄賦值到OVERLAPPED中的事件。 對象

(3)鏈接管道ConnectNamedPipe(hPipe, &olp) ; 事件

(4)這是不斷輪詢的狀態 ip

 等待 WaitForSingleObject(hPipe, 1000) //可設置異步和同步 同步

 等待結束以後獲取結果GetOverlappedResult(hPipe, &olp, &len, TRUE)  it

 (5)讀取管道 ReadFile(hPipe, buffer, bufferLen, NULL,  &olp);

相關文章
相關標籤/搜索