第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()系统调用。很
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。