WIN32 API 文件设备IO操作函数解析

CreateFile用于创建,打开一个文件或者I/O设备。常用的I/O设备包括:文件,文件流,目录,物理磁盘,卷,控制台缓冲区,磁带驱动器,通信资源,邮槽和管道。根据所访问对象以及所指定访问特性标识的不同,该函数会返回一个用于访问所指定对象的句柄。其基本语法为:

HANDLE WINAPI CreateFile(
  __in      LPCTSTR lpFileName,
  __in      DWORD dwDesiredAccess,
  __in      DWORD dwShareMode,
  __in_opt  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  __in      DWORD dwCreationDisposition,
  __in      DWORD dwFlagsAndAttributes,
  __in_opt  HANDLE hTemplateFile
);

参数
1)lpFileName
所要打开或创建的文件或设备,该函数的ANSI版本中的文件名最大长度限制为MAX_PATH,但是调用其Unicode版本则可以达到32767个宽字符。

dwDesiredAccess
访问请求的类型,可以为GENERIC_READ,GENERIC_WRITE,(GENERIC_WRITE|GENERIC_WRITE),或者0。当此参数为0时,既不能读也不能写所请求的对象,而是可以用于查询比如文件,目录或者设备属性的元数据而不用访问具体的文件或设备。此处指定的属性也不能与后面要求的dwShareMode参数相冲突。

dwShareMode
文件或设备的共享模式可以是读,写,读写,删除,所有这些属性或者都没有。当然对一个文件或设备属性的访问不被此标识所影响。dwShareMode=0表示是互斥使用,如果CreateFile打开成功,别的程序只能等到当前程序关闭对象句柄之后才能再打开或使用。

lpSecurityAttributes
指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全性
dwCreationDisposition
设置当文件或设备已经存在或不存在时的动作。对于设备文件,此参数总是设置为OPEN_EXISTING。而对于文件可以设置的参数由:CREATE_ALWAYS(总是新建文件),CREATE_NEW(如果已经存在则出错,如果不存在则新建),OPEN_ALWAYS(如果文件存在则打开,如果文件不存在则新建一个文件),OPEN_EXISTING(如果文件存在则打开,如果不存在则错误),TRUNCATE_EXISTING(如果存在则清空数据,如果不存在则出错)。

dwFlagsAndAttributes
FILE_ATTRIBUTE_ARCHIVE:文件存档(备份或移动时会对文件作标记)
FILE_ATTRIBUTE_ENCRYPTED:加密
FILE_ATTRIBUTE_HIDDEN:隐藏属性
FILE_ATTRIBUTE_NORMAL:文件没有其他属性设置,此属性只能被单独使用才合法
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED:不建立内容索引
FILE_ATTRIBUTE_OFFLINE:脱机属性,文件内容暂时不可用。此属性被Remote Storage软件所用,不能任意更改。
FILE_ATTRIBUTE_READONLY:只读文件属性,应用程序不能写或删除
FILE_ATTRIBUTE_SYSTEM:文件时系统文件或被操作系统互斥地使用
FILE_ATTRIBUTE_TEMPORARY:临时文件,使用过程中尽量留在内存以保证存取速度。
Flag包括:
FILE_FLAG_WRITE_THROUGH:指示系统立即写磁盘,这个写操作允许被cache缓存,但不能被搁置
FILE_FLAG_OVERLAPPED:指示系统初始化对象,如果操作需要大量时间执行就先返回一个ERROR_IO_PENDING,当操作完成后再通过事件使能信号量。指定这个标志就必须在read和write函数里初始化OVERLAPPED结构体,应用程序必须执行重复的读写操作。此时操作系统不维护文件指针,当前的位置需要通过OVERLAPPED的指针传递给读写函数,这个标志还允许多个并行读写操作。

你可能感兴趣的:(嵌入式系统)