13.5.1 打开串口
在很多系统中(包括Windows系统)把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile()来打开或创建的。该函数的原型为:
- HANDLE CreateFile(
- LPCTSTR lpFileName, //将要打开的串口逻辑名
- DWORD dwDesiredAccess, //指定串口访问的类型
- DWORD dwShareMode, //指定共享属性
- LPSECURITY_ATTRIBUTES lpSecurityAttributes, //引用安全型属性结构
- DWORD dwCreationDistribution, //创建标志
- DWORD dwFlagsAndAttributes, //属性描述
- HANDLE hTemplateFile //对串口而言该参数必须置为NULL
- );
同步I/O方式打开串口的示例代码如下:- 01 HANDLE OpenCom()
- 02 {
- 03 HANDLE hCom; //串口句柄
- 04 hCom=CreateFile( "COM1 ", //打开COM1口
- 05 GENERIC_READ|GENERIC_WRITE, //允许读和写
- 06 0, //独占方式
- 07 NULL,
- 08 OPEN_EXISTING, //打开已存在的文件
- 09 0, //同步方式打开
- 10 NULL);
- 11 if(hCom==(HANDLE)-1) //打开失败
- 12 {
- 13 AfxMessageBox( "打开串口失败! ");
- 14 Return NULL;
- 15 }
- 16 return hCom;
- 17 }
与同步I/O方式打开的过程与步骤相同,只是参数有点变化,异步I/O打开串口的示例代码如下:- 01 HANDLE OpenCom()
- 02 {
- 03 HANDLE hCom; //串口句柄
- 04 hCom=CreateFile( "COM1 ", //打开COM1口
- 05 GENERIC_READ|GENERIC_WRITE, //允许读和写
- 06 0, //独占方式
- 07 NULL,
- 08 OPEN_EXISTING, //打开已存在的文件
- 09 FILE_ATTRIBUTE_NORMAL|
- 10 FILE_FLAG_OVERLAPPED, //重叠方式
- 11 NULL);
- 12 if(hCom==(HANDLE)-1) //打开失败
- 13 {
- 14 AfxMessageBox( "打开串口失败! ");
- 15 Return NULL;
- 16 }
- 17 return hCom;
- 18 }