APUE3笔记-第三章 文件I/O

1 不带缓冲的I/O——open read write lseek close

    1.1 不带缓冲:

    1.2 文件描述符(FD)

    1.3文件状态标志

    1.4文件偏移量

2 对内核行为的控制——dup fcntl sync

    2.1文件描述符 dup

     2.2文件状态标志 fcntl

    2.3文件同步 sync

注意


1 不带缓冲的I/O——open read write lseek close

    1.1 不带缓冲:

      文件的读写需要通过系统调用 调用内核的VFS来完成,所以在用户层和内核层的数据传输过程中可以使用缓冲区来暂存数据。这一章节所讲的函数都是在进程和内核之间没有使用缓冲区的,如果想使用缓冲区需要程序员自己实现。标准I/O库,stdio.h中用于文件读写的接口里面,已经自己实现了在用户和内核交换数据时的缓冲区。

    1.2 文件描述符(FD)

      INT类型。进程通过文件描述符来标识打开的文件。open返回的是fd;read write lseek close都需要给定要操作的文件的fd。这是根据内核实现而存在的一个概念,在内核中,为每个进程创建的数据结构里,task_struct进程描述符里,有一个列表是打开文件的描述符表,通过fd链接描述文件的数据结构。对于打开的文件,可以有多个文件描述符。

    1.3文件状态标志

      指进程对打开的文件可以执行什么操作:读、写、执行、截断(将文件大小设为0)、追加(写时从文件末尾开始)。文件状态标志规定了进程可以对文件执行的操作。在执行写操作时会检查文件状态标志是否有写权限,如果没有,则执行失败。

    1.4文件偏移量

      对于打开的文件,使用文件偏移量来记录当前位于文件的什么位置,相当于编辑器中的Cursor。

可以使用lseek设置文件偏移量,lseek返回当前的文件偏移量。

 

2 对内核行为的控制——dup fcntl sync

    2.1文件描述符 dup

      我们可以使用dup为打开的文件创建新的文件描述符,dup2(int old_fd, int new_fd)指定新创建的文件描述符。对于每一个进程,内核会为自动为他打开3个文件描述符 0 1 2,分别对应标准输入,标准输出,标准出错文件,至于这三个文件对应的值,和程序的运行环境有关,当进程是通过shell创建,标准输入输出就对应差shell终端。文件描述符可以在父子进程间共享,对于文件描述符有一个标志FD_CLOEXEC,可以设置文件描述符在子进程中是否自动关闭。

     2.2文件状态标志 fcntl

      我们可以使用fcntl获取文件状态标志F_GETFL、设置文件状态标志F_SETFL、复制文件描述符F_DUPFD(同上)、设置文件描述符F_SETFD、获取文件描述符F_GETFD、获取文件所属进程F_GETOWN、设置文件所属进程F_SETOWN、设置子进程中关闭F_DUPFD_CLOEXEC。

    2.3文件同步 sync

      文件一般是存放在磁盘,从磁盘到内核,操作系统会实现一定的缓存(VFS虚拟文件系统),所以数据不会马上同步到磁盘,可以调用sync fsync fdatasync将内核中缓存的脏数据同步到磁盘上。

 

注意

      Shell中使用 > < >> << >& <&对输入输出进行重定向,就是通过进程 0 1 2 文件描述符的重新设置实现的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值