用creatfile函数打开串口

windows把串口设备当做文件来对待操作,所以用CreatFile,CloseFile等函数对串口进行操作。

creatfile函数定义如下:

HANDLE CreatFile(
LPCTSTR lpName,//文件名,此处为串口号
DWORD dwDesireAccess,//访问类型,读(GENERIC_READ)写(GENERIC_WRITE)两者兼有(GENERIC_READ|GENERIC_WRITE)
DWORD dwShareMode,//文件的共享属性,由于串口不能共享,所以设置为0
LPSECURITY_ATTRIBUTES lpSecurityAttributes,//安全属性,参数为LPSECURITY_ATTRIBUTES结构。
DWORD dwCreationDisposition,//指定端口被占用时采取的行动,此处必须设为OPEN_EXISTING,打开一个已经存在的端口
DWORD dwFlagsAndAttributes,//端口属性,FILE_FLAG_OVERLAPPED有意义,可以后台运行
HANDLE hTemplateFile//指向模板文件的句柄,端口时必须设置为零。
);

typedef struct _SECURITY_ATTRIBUTES {   
	DWORD  nLength;   //结构的长度
	LPVOID lpSecurityDescriptor;  //指向一个安全描述符 
	BOOL   bInheritHandle;   //句柄能否被继承
	} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES; 

 

句柄:用一个四字节长度的值来标志应用程序中的不同对象和同类对象中的不同实例,如一个窗口、按钮等,应用程序能够通过句柄访问相应的对象的信息,但句柄不是一个指针。Windows之所以设置句柄,与内存管理机制的虚拟地址有关,数据的地址要变动,用句柄来记载数据地址的变动,。数据对象家载入内存后获得了地址,但这个地址并不固定,数据对象在内存和硬盘之间游曳移动,所以系统为进程分配固定的地址来储存进程下数据对象变化后的地址,重新启用该数据时,去所属句柄按内容存取即可。

句柄继承:父进程生成子进程时发生,如果是可继承的那么子进程可以通过句柄访问内核对象。不可以继承则子程序不能通过句柄访问内核对象。

用creatfile函数打开串口:

HANDLE hCom;
hCom=CreatFile("COM1",
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXSTING,
FILE_ATTRIBUTE_NORMAL,
0);


你可能感兴趣的:(用creatfile函数打开串口)