实验九 使用异步方式实现文件读\写

实验九 使用异步方式实现文件读\写

一、实验目的

  1. 了解Windows系统异步文件读/写的概念。
  2. 熟悉Windows系统文件读/写相关的API。
  3. 掌握采用异步方式实现文件读/写的相关参数设置。

二、实验准备

文件异步传输及相关API函数介绍

  1. 文件异步传输基本原理

文件异步传输是一种改变指令执行顺序的机制。一般而言,指令是顺序执行的,下一条指令必须在上一条指令执行完毕才可执行。因此当CPU遇到一条访问磁盘的指令时。应用程序需要等待磁盘访问结束后才能进行后续的工作。但如果后续工作与访问磁盘操作无关,这样的等待就显得很没有必要。Windows XP 系统中提供了异步传输机制可以解决这个问题。它通过打开文件时设置标志位表明文件采用异步传输方式,这样,进程不等待读写操作而继续执行。当指令必须用到磁盘访问结果的数据时,可通过一条Wait指令进行等待。
文件异步传输时,访问磁盘指令和等待指令之间的指令与磁盘访问并发进行。从而大大加快了系统处理I/O的速度。

  1. 相关API函数介绍

函数GetOverlappedResult()返回指定文件 命名通道或通信设备上OVERLAPPED操纵的结果。

  • 函数原型
Bool GetOverlappedResult(
HANDLE hFile                               //文件 命名通道或通信设备的句柄,
LPOVERLAPPED lpOverlapped,                //指向OVERLAPPED结构的指针
LPDWORD  lpNumberOfBytesTransferred,,       //指向实际传输字节数的指针
BOOL bWait                                 //等待标志
);

参数说明:

  1. hFile:文件 命名通道或通信设备的句柄,。
  2. lpOverlaooed:指向OVERLAPPED结构的指针。
  3. lpNumberOfBytesTransferred,:32位变量指针, 指向实际传输字节数。
  4. bWait : /等待标志。指定函数是否应等待被挂起的 要完成的OVERLAPPED操作。若为TURE,则OVERLAPPED操作完成之前该函数不返回;若为FASLE,则OVERLAPPED 被挂起,则函数返回FASLE,调用GetlastError()函数应返回ERROR_IO_INCOMPLETE。

返回值:

如果函数调用成功,则返回值为非0值。如果函数调用失败,则返回值为0.若要得到更多的错误信息,则调用函数GetLastError()。

其他相关的API函数的介绍

文件创建

函数CreateFile( ) 用于创建一个新文件,如果文件已经存在,则得到该文件的句柄。该函数的参数dwFalgsAndAttributes决定了文件的传输方式,对于普通的文件传输,可将参数设置为FILE_ATTRIBUTE_NORMAL;而若设置为FILE_FLAG_NO_BUFFERING,表示不使用高速缓存进行文件传输;若同时使用标志FILE_FLAG_NO_BUFFERING和FILE_FLAG_OVERLAPPED,可对文件进行异步传输;若设置为FILE_FLAG_SEQUENTIAL_SCAN,表示使用高速缓存进行文件的传输。

  • 函数原型
HANDLE CreateFile(
    LPCTSTR lpFileName,                            	 //指向文件名的指针
    DWORD dwDesiredAccess,                        	 //读/写访问模式
    DWORD dwShareMode,                           	 //共享模式
    LPSECURITY_ATTRIBUTES lpSecurityAttributes,  	 //指向安全属性的指针
    DWORD dwCreationDisposition,                     //文件存在标志
    DWORD dwFlagsAndAttributes,                      //文件属性
    DWORD hTemplateFile                              //指向访问模板文件的句柄
    ) ;
  • 参数说明
  1. lpFILENam
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值