第2章嵌入式文件IO编程.ppt
《第2章嵌入式文件IO编程.ppt》由会员分享,可在线阅读,更多相关《第2章嵌入式文件IO编程.ppt(50页珍藏版)》请在三一文库上搜索。
1、嵌入式应用程序设计 第2章 嵌入式文件I/O编程,2,第1章 搭建嵌入式Linux开发环境 第2章 嵌入式文件I/O编程 第3章 嵌入式Linux多任务编程 第4章 嵌入式Linux进程间通行 第5章 嵌入式Linux多线程编程 第6章 嵌入式Linux网络编程 第7章 Qt图形编程 第8章 嵌入式Linux设备驱动编程 第9章 Qt聊天项目设计,课程安排:,3,2.1 Linux系统调用及用户编程接口 2.2 Linux文件I/O系统概述 2.3 底层文件I/O操作 2.4 嵌入式Linux串口应用编程 2.5 标准I/O编程 2.6 实验内容 2.7 小结 2.8 思考与练习,本章课程:,
2、4,2.1.1 系统调用,2.1 Linux系统调用及用户编程接口,系统调用是指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口获得操作系统内核提供的服务。例如用户可以通过进程控制相关的系统调用来创建进程、实现进程之间的通信等。,5,2.1.2 用户编程接口,2.1 Linux系统调用及用户编程接口,在Linux中,用户编程接口(API)遵循了在Unix中最流行的应用编程界面标准POSIX标准。POSIX标准是由IEEE和ISO/IEC共同开发的标准系统。该标准基于当时现有的Unix实践和经验,描述了操作系统的系统调用编程接口(实际上就是API),用于保证应用程序
3、可以在源代码一级上在多种操作系统上移植运行。这些系统调用编程接口主要是通过C库(libc)实现的。,6,2.1.3 系统命令,2.1 Linux系统调用及用户编程接口,系统命令相对API更高了一层,它实际上一个可执行程序,它的内部引用了用户编程接口(API)来实现相应的功能 ,它们之间的关系如图:,7,2.2.1 虚拟文件系统 Linux系统成功的关键因素之一就是具有与其他操作系统和谐共存的能力。Linux的文件系统由两层结构构建。第一层是虚拟文件系统(VFS),第二层是各种不同的具体的文件系统。 VFS在linux系统中的位置如图:,2.2 Linux文件I/O系统概述,8,2.2.2 中文
4、件及文件描述符 对于Linux而言,所有对设备和文件的操作都是使用文件描述符来进行的。文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数。 一个进程启动时,都会打开3个文件:标准输入、标准输出和标准出错处理,2.2 Linux文件I/O系统概述,9,2.3.1 基本文件操作 open函数是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数。 所需头文件: #include #include #includ
5、e 原型: int open(const char *pathname, int flags, int perms),2.3 底层文件I/O操作,10,2.3.1 基本文件操作 open函数语法要点,2.3 底层文件I/O操作,11,2.3.1 基本文件操作 close()函数是用于关闭一个被打开的文件。 close函数语法要点:,2.3 底层文件I/O操作,12,2.3.1 基本文件操作 read()函数是用于将从指定的文件描述符中读出的数据放到缓存区中,并返回实际读入的字节数 。 read函数语法要点:,2.3 底层文件I/O操作,13,2.3.1 基本文件操作 write()函数是用于向
6、打开的文件写数据,写操作从文件的当前指针位置开始。 write函数语法要点:,2.3 底层文件I/O操作,14,2.3.1 基本文件操作 lseek()函数是用于在指定的文件描述符中将文件指针定位到相应的位置。 lseek函数语法要点:,2.3 底层文件I/O操作,15,2.3.2 文件锁 fcntl()函数具有很丰富的功能,它可以对已打开的文件描述符进行各种操作,不仅包括管理文件锁,还包括获得设置文件描述符和文件描述符标志、文件描述符的复制等很多功能。,2.3 底层文件I/O操作,16,2.3.2 文件锁 fcntl()函数语法要点,2.3 底层文件I/O操作,17,2.3.2 文件锁 fc
7、ntl()函数第三个参数lock说明 lock为结构体flock它的定义为: struct flock flock成员取值含义如表: short l_type; off_t l_start; short l_whence; off_t l_len; pid_t l_pid; ,2.3 底层文件I/O操作,18,2.3.3 多路复用 I/O处理模型 阻塞I/O模型 非阻塞模型 I/O多路转接模型 信号驱动I/O模型 异步I/O模型 select和poll的I/O转接模型是处理I/O复用的一个高效的方法,2.3 底层文件I/O操作,19,2.3.3 多路复用 select()函数的语法格式 :,2
8、.3 底层文件I/O操作,20,2.3.3 多路复用 select()对文件描述符进行了分类处理,处理涉及4个宏:,2.3 底层文件I/O操作,21,2.3.3 多路复用 poll函数语法格式:,2.3 底层文件I/O操作,22,2.4.1 串口编程基础知识 常见的数据通信的基本方式可分为并行通信与串行通信两种。 并行通信是指利用多条数据传输线将一个字数据的各比特位同时传送。它的特点是传输速度快,适用于传输距离短且传输速度较高的通信。 串行通信是指利用一条传输线将数据以比特位为单位顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于传输距离长且传输速度较慢的通信。,2.4
9、 嵌入式Linux串口应用编程,23,2.4.1 串口编程基础知识 串口是计算机一种常用的接口,常用的串口有RS-232-C接口。 DB9串口接口:,2.4 嵌入式Linux串口应用编程,24,2.4.2 串口配置 串口设置主要是设置struct termios结构体的各个成员 #include struct termios unsigned short c_iflag; /* 输入模式标志 */ unsigned short c_oflag; /* 输出模式标志 */ unsigned short c_cflag; /* 控制模式标志*/ unsigned short c_lflag; /*
10、 本地模式标志 */ unsigned char c_line; /* 线路规程 */ unsigned char c_ccNCC; /* 控制特性 */ speed_t c_ispeed; /* 输入速度 */ speed_t c_ospeed; /* 输出速度 */ ;,2.4 嵌入式Linux串口应用编程,25,2.4.2 串口配置 保存原先串口设置 为了安全起见和以后调试程序方便,可以先保存原先串口的配置,在这里可以使用函数tcgetattr(fd, ,2.4 嵌入式Linux串口应用编程,26,2.4.2 串口配置 激活选项 CLOCAL和CREAD分别用于本地连接和接受使能,因此,
11、首先要通过位掩码的方式激活这两个选项。 newtio.c_cflag |= CLOCAL | CREAD; 调用cfmakeraw()函数可以将终端设置为原始模式,在后面的实例中,采用原始模式进行串口数据通信。 cfmakeraw(,2.4 嵌入式Linux串口应用编程,27,2.4.2 串口配置 设置波特率 设置波特率有专门的函数,用户不能直接通过位掩码来操作。设置波特率的主要函数有:cfsetispeed()和cfsetospeed()。 示例: cfsetispeed(,2.4 嵌入式Linux串口应用编程,28,2.4.2 串口配置 设置字符大小 与设置波特率不同,设置字符大小并没有现
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 文件 IO 编程
链接地址:https://www.31doc.com/p-3405757.html