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);

相关文章
相关标签/搜索