win32 CreateFile

1 参考资料:

msdn:

函数定义
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

例子:Opening a File for Reading or Writing
https://msdn.microsoft.com/en-us/library/windows/desktop/bb540534(v=vs.85).aspx
例子:串口 Configuring a Communications Resource
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363201(v=vs.85).aspx
例子: 监控串口事件 Monitoring Communications Events
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363424(v=vs.85).aspx

《windows高级编程指南》第15章 设备I/O 重点

2 函数介绍

创建或者打开一个文件或者I/O设备.
通用的I/O设备,包括下面这些:
文件
文件流
目录
物理盘
volume 磁盘卷 逻辑盘
控制台缓冲区
磁带驱动器,
通信资源 串行口 和并行口 应该包括USB 口吧
邮槽和管道

根据所访问对象以及所指定访问特性标识的不同,该函数会返回一个用于访问所指定对象的句柄

3 函数原型

HANDLE WINAPI CreateFile(
  _In_     LPCTSTR               lpFileName,    // 设备名称
  _In_     DWORD                 dwDesiredAccess, // 读还是写
  _In_     DWORD                 dwShareMode,     // 对文件的访问独占
  _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, //可以传NULL
  _In_     DWORD                 dwCreationDisposition, //创建或者打开文件的方式
  _In_     DWORD                 dwFlagsAndAttributes,  //
  _In_opt_ HANDLE                hTemplateFile          // 可以为NULL
);

4 参数解析

lpFileName

设备名称 指向文件名的指针

dwDesiredAccess
  • 0 不想读写设备数据,只想改变设备的配置—-如文件的时间戳—-应传递0
  • GENERIC_READ 只读访问
  • GENERIC_WRITE 只写访问 用于向打印机传递数据或者备份软件
  • GENERIC_READ | GENERIC_WRITE 允许对设备的读写
dwShareMode
  • 0 阻止其他进程打开文件,当该进程想要删除,读或者写访问该文件
  • FILE_SHARE_DELETE
  • FILE_SHARE_READ
  • FILE_SHARE_WRITE
lpSecurityAttributes 指向安全属性的指针

可以为NULL

dwCreationDisposition

当文件 存在 或不存在 ,该函数的默认行为

  • CREATE_ALWAYS
    如果指定的文件存在并且是可写的,函数会覆盖该文件,
    函数成功返回,最后的last-error code 设置为ERROR_ALREADY_EXISTS(183)
    如果指定的文件不存在,但是是一个有效的路径,会创建新的文件,
    函数成功返回,last-error code为 0

  • CREATE_NEW
    创建一个新的文件,需要这个文件不存在
    如果文件存在,函数失败,返回 ERROR_FILE_EXISTS (80).
    如果文件不存在,但是是一个有效的可写的路径位置,会创建一个新的文件

  • OPEN_ALWAYS
    打开一个文件,
    如果文件存在,函数正确返回,ERROR_ALREADY_EXISTS (183).
    如果不存在,创建一个文件,并且返回0
  • OPEN_EXISTING
    如果文件存在 就打开
    如果文件不存在,函数失败,返回ERROR_FILE_NOT_FOUND(2)
  • TRUNCATE_EXISTING
    打开一个已经存在的文件,并将其大小设置为0
    如果文件不存在,则失败,GENERIC_WRITE标志必须同该标志一起使用。
dwFlagsAndAttributes 文件属性和标志

可以为0,一般的普遍的默认值是FILE_ATTRIBUTE_NORMAL ,这个一般是单独使用
有两个作用:它允许微调同设备的通信,如果设备是文件,还能设置文件的属性。
大多数的标志告诉系统你打算如何访问设备。系统可以优化它的缓冲算法来帮助程序工作得更有效

其中的一个标志是 FILE_FLAG_OVERLAPPED ,告诉系统,你想要异步的访问一个设备。
打开设备的缺省方式是同步I/O(不指定FILE_FLAG_OVERLAPPED)。阻塞的写 和读。
因为设备I/O同大多数其他操作相比较缓慢,你可能会想要异步通信某些设备。
简单的说是,你调用一个函数告诉操作系统去读写数据,但是不必要等到I/O结束。
你的调用立即返回。操作系统使用它的线程,为你完成I/O。
当操作系统完成了你请求的I/O的时候,你会得到通知。
异步I/O是设计应该用程序时,一种很方便的方法。

hTemplateFile

标识一个打开的句柄或者为NULL

猜你喜欢

转载自blog.csdn.net/wowocpp/article/details/80511831