最近要写一个串口程序,所以对windows的IO方式进行了简单的复习。简要的来说windows 的IO方式分为两种:同步和异步。而我们要说的重叠IO是属于异步IO方式的。现在windows 支持的系统对象包括文件,管道,串口,网络等。接下来我们先用管道来描述重叠IO的操作流程。
重叠IO只要是依赖OVERLAPPED这个结构体:
重叠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);