第2章 IO-【千锋教育】Linux系统编程(慕课版)

2023-03-21
| 66页
| 119人阅读
| 0人下载
教辅

内容正文:

第2章 I/O I/O的基本概念 Linux标准I/O Linux文件I/O I/O的基本概念 Linux标准I/O 2.2 2.1 Linux文件I/O 2.3 ☞点击查看本小节知识架构 ☞点击查看本小节知识架构 ☞点击查看本小节知识架构 学习目标 了解 掌握 熟练 掌握 了解linux操作系统框架 1 熟练使用应用层编程接口实现对文件操作 4 2 掌握标准I/O的系列编程接口的用法 3 掌握文件I/O的系列编程接口的用法 销售额 掌握知识 理解知识 熟悉知识 了解知识 2.5 2.5 2.5 2.5 应用层开发过程经常涉及对文件的访问。因此本章将在上一章的基础上继续讨论文件,重点介绍用于文件输入/输出数据的各种编程接口(Application Programming Interface,API)。对文件实现输入/输出称为I/O。Linux提供了两种I/O操作形式:标准I/O与文件I/O,它们分别有另外一种名称:即带缓存I/O、不带缓存I/O。标准I/O和文件I/O在Linux系统编程中属于基本功,需要熟练掌握。 2.1 I/O的基本概念 2.1.1 I/O的定义 返回目录 2.1.2 系统调用 2.1.3 用户程序编程接口 2.1 I/O的基本概念 说到I/O,顾名思义,它所指的是Input/Output,即输入/输出。I/O操作的基本对象为文件,文件既可以是设备文件,也可以是普通文件。Linux系统中,I/O的类型可以分为标准I/O与文件I/O。同时针对I/O的操作模式,也实现了阻塞I/O、非阻塞I/O、多路复用I/O以及异步I/O,这四种典型的模型。 标准I/O采用间接系统调用(库函数)的方式实现对文件的读写。文件I/O采用直接系统调用的方式实现对文件的读写。 因此,标准I/O和文件I/O是为了实现对文件读写而封装的两套不同的用户程序编程接口。根据上述的定义,理解用户编程接口与系统调用是关键。 2.1.1 I/O的定义 2.1 I/O的基本概念 操作系统负责管理和分配所有的计算机资源。为了更好地服务于应用程序,操作系统提供了一组特殊接口—系统调用接口层。通过接口层,用户程序可以使用操作系统内核提供的各种功能,如分配内存、创建进程、实现进程之间的通信等,通过Linux系统框架图可以更好地理解系统调用接口层的重要性。 2.1.2 系统调用 2.1 I/O的基本概念 如图所示,系统调用接口层(System Call Interface,SCI)介于应用层与内核层之间(系统调用接口层不属于内核层,但它是由内核函数实现的)。为了安全考虑,应用程序不可以直接访问硬件资源。在单片机开发中,由于不需要操作系统,因此开发人员可以编写代码直接访问硬件;而在嵌入式系统中,通常需要操作系统,程序访问硬件资源的方式就发生了改变。 2.1.2 系统调用 2.1 I/O的基本概念 操作系统基本上都支持多任务,即同时可以运行多个程序。如果允许应用程序直接访问硬件资源,肯定会带来很多问题。因此,所有软硬件资源的管理和分配都由操作系统来完成,即应用程序向操作系统发出服务请求,操作系统收到请求后执行相关的代码来处理,并将结果返回。 如图所示,系统调用执行的流程如下。 2.1.2 系统调用 2.1 I/O的基本概念 (1)应用程序代码调用封装的func()函数,该函数是一个包装的系统调用的函数。 (2)func()函数负责准备向内核传递参数,并触发软中断int 0x80切换到内核。 (3)CPU被软中断打断后,执行中断处理函数,即系统调用处理函数(system_call)。 (4)system_call调用系统调用服务例程(sys_func),真正开始处理该系统调用。 2.1.2 系统调用 2.1 I/O的基本概念 关于系统调用,还可以关注以下几点。 (1)系统调用将处理器从用户态切换到核心态,提高执行权限,以便CPU可以访问受保护的内核内存。 (2)系统调用的组成是固定的,每个系统调用都由一个唯一的数字来标识。 (3)每个系统调用可辅之以一套参数,对用户空间与内核空间之间传递的信息加以规范。 2.1.2 系统调用 2.1 I/O的基本概念 用户程序编程接口通俗的解释是各种库(最重要的是C库)中的函数。为了提高开发效率,C库中实现了很多函数。这些函数实现了常用的功能,供程序员调用。这样一来,程序员不需要自己编写这些代码,直接调用库函数就可以实现基本功能,提高了代码的复用率。使用用户程序编程接口还有一个好处:程序具有良好的可移植性。几乎所有的操作上都实现了C库,所以程序通常只需重新编译一下就可以在其他操作系统下运行。 用户程序编程接口(API)在实现时,通常都要依赖系统调用接口。例如,创建进程的fork()依赖于内核空间的sys_fork()系统调用。很

资源预览图

第2章 IO-【千锋教育】Linux系统编程(慕课版)
1
第2章 IO-【千锋教育】Linux系统编程(慕课版)
2
第2章 IO-【千锋教育】Linux系统编程(慕课版)
3
第2章 IO-【千锋教育】Linux系统编程(慕课版)
4
第2章 IO-【千锋教育】Linux系统编程(慕课版)
5
第2章 IO-【千锋教育】Linux系统编程(慕课版)
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。