Windows IO方式之重叠IO

最近要写一个串口程序,所以对windows的IO方式进行了简单的复习。简要的来说windows 的IO方式分为两种:同步和异步。而我们要说的重叠IO是属于异步IO方式的。现在windows 支持的系统对象包括文件,管道,串口,网络等。接下来我们先用管道来描述重叠IO的操作流程。

重叠IO只要是依赖OVERLAPPED这个结构体:

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

 重叠IO 有名管道流程:

(1)创建有名管道 CreateNamedPipeA(pipeName, PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED,

            PIPE_TYPE_BYTE|PIPE_READMODE_BYTE,
            1,
            0,
            0,
            1000,
            NULL
            );打开模式必须指定FILE_FLAG_OVERLAPPED

(2)创建事件CreateEvent(NULL, TRUE, FALSE, NULL);把事件句柄赋值到OVERLAPPED中的事件。

(3)连接管道ConnectNamedPipe(hPipe, &olp) ;

(4)这是不断轮询的状态

 等待 WaitForSingleObject(hPipe, 1000) //可设置异步和同步

 等待结束之后获取结果GetOverlappedResult(hPipe, &olp, &len, TRUE) 

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


转载于:https://my.oschina.net/u/660965/blog/158465

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值