
原子哥在线教学:www.yuanzige.com 论坛:http://www.openedv.com/forum.php
1
I.MX6U 嵌入式 Linux C 应用编程指南
I.MX6U 嵌入式 Linux C
应用编程指南 V1.4
-正点原子 I.MX6U ALPHA/Mini 开发板教程

原子哥在线教学:www.yuanzige.com 论坛:http://www.openedv.com/forum.php
2
I.MX6U 嵌入式 Linux C 应用编程指南
正点原子公司名称 :广州市星翼电子科技有限公司
原子哥在线教学平台 :www.yuanzige.com
开源电子网 / 论坛 :http://www.openedv.com/forum.php
正点原子淘宝店铺 :https://openedv.taobao.com
正点原子官方网站 :www.alientek.com
正点原子 B 站视频 :https://space.bilibili.com/394620890
电话:020-38271790 传真:020-36773971
请关注正点原子公众号,资料发布更新我们会通知。
请下载原子哥 APP,数千讲视频免费学习,更快更流畅。

原子哥在线教学:www.yuanzige.com 论坛:http://www.openedv.com/forum.php
3
I.MX6U 嵌入式 Linux C 应用编程指南
文档更新说明
版本
版本更新说明
负责人
校审
发布日期
V1.0
初始版本
邓涛
邓涛
2020.06.10
V1.1
修正:
文档部分描述有误的地方进行了修正!
页眉处论坛地址修改!
重构:
第十六章 GPIO 应用编程内容重构
第十七章输入设备应用编程内容重构
第十九章 FrameBuffer 应用编程内容重构
添加:
第十五章点亮 LED 添加 15.1.4 小节
第十八章使用 tslib 库
第二十章在 LCD 上显示 jpeg 图像
第二十一章在 LCD 上显示 png 图片
第二十二章 LCD 横屏切换为竖屏
第二十三章在 LCD 上显示字符
第二十四章 PWM 应用编程
第二十五章 V4L2 摄像头应用编程
第二十六章串口应用编程
第二十七章看门狗应用编程
邓涛
邓涛
2020.07.20
V1.2
修正:
文档部分描述有误的地方进行了修正!
添加:
第二十八章音频应用编程
第二十九章网络基础知识
第三十章 socket 编程基础
邓涛
邓涛
2021.09.16
V1.3
修正:
文档部分描述有误的地方进行了修正!
添加:
第三十一章 CAN 应用编程基础
第三十二章 CMake 入门与进阶
第三十三章实战小项目之 MQTT 物联网
邓涛
邓涛
2021.11.22
V1.4
添加:
第三十四章实战小项目之视频监控
邓涛
邓涛
2021.12.08

原子哥在线教学:www.yuanzige.com 论坛:http://www.openedv.com/forum.php
4
I.MX6U 嵌入式 Linux C 应用编程指南
目录
前言 ................................................................................................................................................................... 19
第一篇 入门篇 ................................................................................................................................................. 21
应用编程概念 ..................................................................................................................................... 22
1.1 系统调用 ................................................................................................................................................ 23
1.2 库函数 .................................................................................................................................................... 27
1.3 标准 C 语言函数库 ................................................................................................................................ 28
1.4 main 函数 ................................................................................................................................................ 30
1.5 本书使用的开发环境 ............................................................................................................................ 30
Ubuntu 系统下安装 Eclipse ............................................................................................................. 31
文件 I/O 基础 ...................................................................................................................................... 43
2.1 一个简单的文件 IO 示例 ...................................................................................................................... 44
2.2 文件描述符 ............................................................................................................................................ 45
2.3 open 打开文件......................................................................................................................................... 46
2.4 write 写文件 ............................................................................................................................................ 50
2.5 read 读文件 ............................................................................................................................................. 50
2.6 close 关闭文件 ........................................................................................................................................ 51
2.7 lseek ......................................................................................................................................................... 51
2.8 练习 ........................................................................................................................................................ 52
深入探究文件 I/O ............................................................................................................................... 59
3.1 Linux 系统如何管理文件 ....................................................................................................................... 60
静态文件与 inode ........................................................................................................................... 60
文件打开时的状态 ......................................................................................................................... 62
3.2 返回错误处理与 errno ........................................................................................................................... 63
strerror 函数 ...................................................................................................................................... 64
perror 函数........................................................................................................................................ 65
3.3 exit、_exit、_Exit ................................................................................................................................... 66
_exit()和_Exit()函数 ........................................................................................................................ 67
exit()函数 .......................................................................................................................................... 67
3.4 空洞文件 ................................................................................................................................................ 68
概念 ................................................................................................................................................. 68
实验测试 ......................................................................................................................................... 68
3.5 O_APPEND 和 O_TRUNC 标志 ............................................................................................................ 70
O_TRUNC 标志 ............................................................................................................................... 70
O_APPEND 标志 ............................................................................................................................. 71
3.6 多次打开同一个文件 ............................................................................................................................ 74
验证一些现象 ................................................................................................................................. 74
多次打开同一文件进行读操作与 O_APPEND 标志 ................................................................... 78
3.7 复制文件描述符 .................................................................................................................................... 83
dup 函数 ........................................................................................................................................... 84

原子哥在线教学:www.yuanzige.com 论坛:http://www.openedv.com/forum.php
5
I.MX6U 嵌入式 Linux C 应用编程指南
dup2 函数 ......................................................................................................................................... 87
3.8 文件共享 ................................................................................................................................................ 88
3.9 原子操作与竞争冒险 ............................................................................................................................ 91
竞争冒险简介 ................................................................................................................................. 91
原子操作 ......................................................................................................................................... 92
3.10 fcntl 和 ioctl ........................................................................................................................................... 95
fcntl 函数 ........................................................................................................................................ 95
ioctl 函数 ........................................................................................................................................ 99
3.11 截断文件 .............................................................................................................................................. 99
标准 I/O 库 ........................................................................................................................................ 102
4.1 标准 I/O 库简介 ................................................................................................................................... 103
4.2 FILE 指针 .............................................................................................................................................. 103
4.3 标准输入、标准输出和标准错误 ...................................................................................................... 103
4.4 打开文件 fopen().................................................................................................................................. 104
4.5 读文件和写文件 .................................................................................................................................. 105
4.6 fseek 定位 .............................................................................................................................................. 109
4.7 检查或复位状态 .................................................................................................................................. 112
feof()函数 ....................................................................................................................................... 112
ferror()函数 ..................................................................................................................................... 113
clearerr()函数 ................................................................................................................................. 113
4.8 格式化 I/O ............................................................................................................................................ 114
格式化输出 ................................................................................................................................... 114
格式化输入 ................................................................................................................................... 120
小结 ............................................................................................................................................... 125
4.9 I/O 缓冲 ................................................................................................................................................. 125
文件 I/O 的内核缓冲 .................................................................................................................... 125
刷新文件 I/O 的内核缓冲区 ........................................................................................................ 126
直接 I/O:绕过内核缓冲 ............................................................................................................. 128
stdio 缓冲........................................................................................................................................ 133
I/O 缓冲小节 .................................................................................................................................. 138
4.10 文件描述符与 FILE 指针互转 .......................................................................................................... 139
文件属性与目录 ............................................................................................................................... 141
5.1 Linux 系统中的文件类型 ..................................................................................................................... 142
普通文件 ....................................................................................................................................... 142
目录文件 ....................................................................................................................................... 143
字符设备文件和块设备文件 ....................................................................................................... 143
符号链接文件 ............................................................................................................................... 144
管道文件 ....................................................................................................................................... 144
套接字文件 ................................................................................................................................... 144
总结 ............................................................................................................................................... 144
5.2 stat 函数 ................................................................................................................................................. 145
struct stat 结构体 ............................................................................................................................ 145