Win 32系统为串行通信提供了全新的服务。传统的OpenComm、ReadComm、WriteComm、CloseComm等函数已经过时,WM_COMMNOTIFY消息也消失了。取而代之的是文件I/O函数提供的打开和关闭通信资源句柄及读写操作的基本接口。 新的文件I/O函数(CreateFile、ReadFile、WriteFile等)支持重叠式输入输出,这使得线程可以从费时的I/O操作中解放出来,从而极大地提高了程序的运行效率。 12.3.1 串行口的打开和关闭 Win 32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的声明为: HANDLE CreateFile( LPCTSTR lpFileName, // 文件名 DWORD dwDesiredAccess, // 访问模式 DWORD dwShareMode, // 共享模式 LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 通常为NULL DWORD dwCreationDistribution, // 创建方式 DWORD dwFlagsAndAttributes, // 文件属性和标志 HANDLE hTemplateFile // 临时文件的句柄,通常为NULL
如果调用成功,那么该函数返回文件的句柄,如果调用失败,则函数返回INVALID_HANDLE_VALUE。 如果想要用重叠I/O方式(参见12.3.3)打开COM2口,则一般应象清单12.4那样调用CreateFile函数。注意在打开一个通信端口时,应该以独占方式打开,另外要指定GENERIC_READ、GENERIC_WRITE、OPEN_EXISTING和FILE_ATTRIBUTE_NORMAL等属性。如果要打开重叠I/O,则应该指定 FILE_FLAG_OVERLAPPED属性。
清单12.4 HANDLE hCom; DWORD dwError; hCom=CreateFile(“COM2”, // 文件名 GENERIC_READ | GENERIC_WRITE, // 允许读和写 0, // 独占方式 NULL, OPEN_EXISTING, //打开而不是创建 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, // 重叠方式 NULL ); if(hCom = = INVALID_HANDLE_VALUE) { dwError=GetLastError( ); . . .< |
vc++ 笔记--串行通信与重叠I/O
最新推荐文章于 2024-04-24 09:54:54 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)