预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共44页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

华清远见——嵌入式培训专家http://www.farsight.com.cn “黑色经典”系列之《嵌入式Linux应用程序开发详解》 第6章文件I/O编程 本章目标 在搭建起嵌入式开发环境之后,从本章开始,读者将真正开始学习嵌入式Linux的应用 开发。由于嵌入式Linux是经Linux裁减而来的,它的系统调用及用户编程接口API与Linux 基本是一致的,因此,在以后的章节中,笔者将首先介绍Linux中相关内容的基本编程开发, 主要讲解与嵌入式Linux中一致的部分,然后再将程序移植到嵌入式的开发板上运行。因此, 没有开发板的读者也可以先在Linux上开发相关应用程序,这对以后进入嵌入式Linux的实 际开发是十分有帮助的。本章主要讲解文件I/O相关开发,经过本章的学习,读者将会掌握 以下内容。 掌握Linux中系统调用的基本概念 掌握Linux中用户编程接口(API)及系统命令的相互关系 掌握文件描述符的概念 掌握Linux下文件相关的不带缓存I/O函数的使用 掌握Linux下设备文件读写方法 掌握Linux中对串口的操作 熟悉Linux中标准文件I/O函数的使用 华清远见<嵌入式Linux应用开发班>培训教材 华清远见——嵌入式培训专家http://www.farsight.com.cn 6.1Linux系统调用及用户编程接口(API) 由于本章是讲解Linux编程开发的第1章,因此希望读者更加明确Linux系统调用和用户编程 接口(API)的概念。在了解了这些之后,会对Linux以及Linux的应用编程有更深入地理解。 6.1.1系统调用 所谓系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通 过这组“特殊”接口来获得操作系统内核提供的服务。例如用户可以通过进程控制相关的系 统调用来创建进程、实现进程调度、进程管理等。 在这里,为什么用户程序不能直接访问系统内核提供的服务呢?这是由于在Linux中,为了更 好地保护内核空间,将程序的运行空间分为内核空间和用户空间(也就是常称的内核态和用户态), 它们分别运行在不同的级别上,在逻辑上是相互隔离的。因此,用户进程在通常情况下不允许访问 内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。 但是,在有些情况下,用户空间的进程需要获得一定的系统服务(调用内核空间程序), 这时操作系统就必须利用系统提供给用户的“特殊接口”——系统调用规定用户进程进入内 核空间的具体位置。进行系统调用时,程序运行空间需要从用户空间进入内核空间,处理完 后再返回到用户空间。 Linux系统调用部分是非常精简的系统调用(只有250个左右),它继承了UNIX系统调 用中最基本和最有用的部分。这些系统调用按照功能逻辑大致可分为进程控制、进程间通信、 文件系统控制、系统控制、存储管理、网络管理、socket控制、用户管理等几类。 6.1.2用户编程接口(API) 前面讲到的系统调用并不是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内 核提交请求,以获取内核服务的接口。在实际使用中程序员调用的通常是用户编程接口——API, 也就是本书后面要讲到的API函数。但并不是所有的函数都一一对应一个系统调用,有时,一 个API函数会需要几个系统调用来共同完成函数的功能,甚至还有一些API函数不需要调用相 应的系统调用(因此它所完成的不是内核提供的服务)。 在Linux中,用户编程接口(API)遵循了在UNIX中最流行的应用编程界面标准——POSIX 标准。POSIX标准是由IEEE和ISO/IEC共同开发的标准系统。该标准基于当时现有的UNIX实践 和经验,描述了操作系统的系统调用编程接口(实际上就是API),用于保证应用程序可以在源代 码一级上在多种操作系统上移植运行。这些系统调用编程接口主要是通过C库(libc)实现的。 6.1.3系统命令 以上讲解了系统调用、用户编程接口(API)的概念,分析了它们之间的相互关系,那 么,读者在第2章中学到的那么多的Shell系统命令与它们之间又是怎样的关系呢? 系统命令相对API更高了一层,它实际上一个可执行程序,它的内部引用了用户编程接 口(API)来实现相应的功能。它们之间的关系如下图6.1所示。 华清远见<嵌入式Linux应用开发班>培训教材 《嵌入式Linux应用程序开发详解》——第6章、文件IO编程 系统命令 系统调用用户编程接口API 内核空间 用户空间 图6.1系统调用、API及系统命令之间的关系 6.2Linux中文件及文件描述符概述 正如第1章中所述,在Linux中对目录和设备的操作都等同于文件的操作,因此,大大 简化