OS实验七:无缓冲方式实现文件读写

本文介绍了在Windows操作系统中,如何使用CreateFile和ReadFile API函数无缓冲地进行文件读写操作。通过设置特定的文件属性,如FILE_FLAG_NO_BUFFERING,可以实现不使用高速缓存的文件传输。实验内容包括从source.txt读取内容并写入nobuffer.txt,确保读写数据块大小为扇区的2^n倍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第4章 Windows 的文件管理
4.1 实验目的
(1)熟悉Windows系统文件读\写相关API。
(2)掌握无缓冲方式实现文件读\写相关参数的设置。
4.1.2 实验准备知识:相关API函数介绍

  1. 文件创建
    函数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 ) lpFILEName:指向文件名的指针。
    ( 2 ) dwDesiredAccess:指出访问文件的类型,可以是读访问、写访问、读 / 写访问或查询访问。该参数可以是表4-1中的组合。
    ( 3 ) dwShareMode:指出文件共享模式。若dwShareMode的值为0,表示目标不能被共享。若要共享文件,可以使用表4-2中的组合。
    表4-1 不同值的描述
    值 描述
    0 查询访问
    GENERIC_READ 读访问,从文件中读出数据,且移动文件指针。当需要对文件进行读写时,该属性可以与GENERIC_WRITE组合使用
    GENERIC_WRITE 写访问,将数据写入文件,且移动文件指针。当需要对文件进行读/写时,该属性可以与GENERIC_READ组合使用

                         表4-2 dwShareMode的值
        值                               描述 
    

FILE_SHARE_DELETE 仅当删除访问时,对文件的打开操作才能成功
FILE_SHARE_READ 仅当读访问时,对文件的打开操作才能成功
FILE_SHARE_WRITE 仅当写访问时,对文件的打开操作才能成功
( 4 ) lpSecurityAttributes:指向安全属性的指针。为NULL时,子进程可以继承该安全描述符。
( 5 ) dwCreationDisposition:文件存在标志。指出当文件不存在时,可以对文件进行何种操作。可以取表4-3中的值。
表4-3 dwCreationDisposition 的值
值 描述
CREAT_NEW 创建新文件。若文件已存在,则该函数调用失败
CREAT_ALWAYS 创建新文件。若文件已存在,则该函数覆盖原文件的内容且清空现有属性
OPEN_EXISTING 打开已存在文件,若文件不存在,则该函数打开失败
OPEN_ALWAYS 若文件存在,则打开该文件,若文件不存在,则以CREAT_NEW方式创建文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值