基本信息
源码名称:【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.0
源码大小:15.69M
文件格式:.pdf
开发语言:C/C++
更新时间:2021-08-17
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
目录 前言................................................................................................................................................................... 14 第一篇 入门篇 ................................................................................................................................................. 16 应用编程概念 ..................................................................................................................................... 17 1.1 系统调用 ................................................................................................................................................ 18 1.2 库函数.................................................................................................................................................... 22 1.3 标准 C 语言函数库................................................................................................................................ 23 1.4 main 函数 ................................................................................................................................................ 25 1.5 本书使用的开发环境 ............................................................................................................................ 25 Ubuntu 系统下安装 Eclipse............................................................................................................. 26 文件 I/O 基础...................................................................................................................................... 38 2.1 一个简单的文件 IO 示例...................................................................................................................... 39 2.2 文件描述符 ............................................................................................................................................ 40 2.3 open 打开文件......................................................................................................................................... 41 2.4 write 写文件............................................................................................................................................ 45 2.5 read 读文件 ............................................................................................................................................. 45 2.6 close 关闭文件........................................................................................................................................ 46 2.7 lseek......................................................................................................................................................... 46 2.8 练习........................................................................................................................................................ 47 深入探究文件 I/O............................................................................................................................... 54 3.1 Linux 系统如何管理文件....................................................................................................................... 55 静态文件与 inode ........................................................................................................................... 55 文件打开时的状态 ......................................................................................................................... 57 3.2 返回错误处理与 errno........................................................................................................................... 58 strerror 函数...................................................................................................................................... 59 perror 函数........................................................................................................................................ 60 3.3 exit、_exit、_Exit................................................................................................................................... 61 _exit()和_Exit()函数 ........................................................................................................................ 62 exit()函数.......................................................................................................................................... 62 3.4 空洞文件 ................................................................................................................................................ 63 概念 ................................................................................................................................................. 63 实验测试 ......................................................................................................................................... 63 3.5 O_APPEND 和 O_TRUNC 标志............................................................................................................ 65 O_TRUNC 标志............................................................................................................................... 65 O_APPEND 标志............................................................................................................................. 66 3.6 多次打开同一个文件 ............................................................................................................................ 69 验证一些现象 ................................................................................................................................. 69 多次打开同一文件进行读操作与 O_APPEND 标志 ................................................................... 73 3.7 复制文件描述符 .................................................................................................................................... 78 dup 函数 ........................................................................................................................................... 79 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com 5 I.MX6U 嵌入式 Linux C 应用编程指南 dup2 函数 ......................................................................................................................................... 82 3.8 文件共享 ................................................................................................................................................ 83 3.9 原子操作与竞争冒险 ............................................................................................................................ 86 竞争冒险简介 ................................................................................................................................. 86 原子操作 ......................................................................................................................................... 87 3.10 fcntl 和 ioctl........................................................................................................................................... 90 fcntl 函数........................................................................................................................................ 90 ioctl 函数........................................................................................................................................ 94 3.11 截断文件 .............................................................................................................................................. 94 标准 I/O 库.......................................................................................................................................... 97 4.1 标准 I/O 库简介..................................................................................................................................... 98 4.2 FILE 指针................................................................................................................................................ 98 4.3 标准输入、标准输出和标准错误 ........................................................................................................ 98 4.4 打开文件 fopen().................................................................................................................................... 99 4.5 读文件和写文件 .................................................................................................................................. 100 4.6 fseek 定位.............................................................................................................................................. 104 4.7 检查或复位状态 .................................................................................................................................. 107 feof()函数....................................................................................................................................... 107 ferror()函数..................................................................................................................................... 108 clearerr()函数 ................................................................................................................................. 108 4.8 格式化 I/O............................................................................................................................................ 109 格式化输出 ................................................................................................................................... 109 格式化输入 ................................................................................................................................... 115 小结 ............................................................................................................................................... 120 4.9 I/O 缓冲................................................................................................................................................. 120 文件 I/O 的内核缓冲.................................................................................................................... 120 刷新文件 I/O 的内核缓冲区........................................................................................................ 121 直接 I/O:绕过内核缓冲............................................................................................................. 123 stdio 缓冲........................................................................................................................................ 128 I/O 缓冲小节.................................................................................................................................. 133 4.10 文件描述符与 FILE 指针互转.......................................................................................................... 134 文件属性与目录 ............................................................................................................................... 136 5.1 Linux 系统中的文件类型..................................................................................................................... 137 普通文件 ....................................................................................................................................... 137 目录文件 ....................................................................................................................................... 138 字符设备文件和块设备文件 ....................................................................................................... 138 符号链接文件 ............................................................................................................................... 139 管道文件 ....................................................................................................................................... 139 套接字文件 ................................................................................................................................... 139 总结 ............................................................................................................................................... 139 5.2 stat 函数................................................................................................................................................. 140 struct stat 结构体............................................................................................................................ 140 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com 6 I.MX6U 嵌入式 Linux C 应用编程指南 st_mode 变量.................................................................................................................................. 141 struct timespec 结构体 ................................................................................................................... 143 练习 ............................................................................................................................................... 143 5.3 fstat 和 lstat 函数................................................................................................................................... 147 fstat 函数 ........................................................................................................................................ 147 lstat 函数......................................................................................................................................... 148 5.4 文件属主 .............................................................................................................................................. 149 有效用户 ID 和有效组 ID............................................................................................................ 150 chown 函数..................................................................................................................................... 150 fchown 和 lchown 函数.................................................................................................................. 153 5.5 文件访问权限 ...................................................................................................................................... 153 普通权限和特殊权限 ................................................................................................................... 153 目录权限 ....................................................................................................................................... 155 检查文件权限 access.................................................................................................................... 156 修改文件权限 chmod.................................................................................................................... 158 umask 函数..................................................................................................................................... 159 5.6 文件的时间属性 .................................................................................................................................. 161 utime()、utimes()修改时间属性 ................................................................................................... 162 futimens()、utimensat()修改时间属性.......................................................................................... 166 5.7 符号链接(软链接)与硬链接 .......................................................................................................... 170 创建链接文件 ............................................................................................................................... 171 读取软链接文件 ........................................................................................................................... 174 5.8 目录...................................................................................................................................................... 175 目录存储形式 ............................................................................................................................... 175 创建和删除目录 ........................................................................................................................... 175 打开、读取以及关闭目录 ........................................................................................................... 177 进程的当前工作目录 ................................................................................................................... 181 5.9 删除文件 .............................................................................................................................................. 184 5.10 文件重命名 ........................................................................................................................................ 186 5.11 总结.................................................................................................................................................... 187 字符串处理 ....................................................................................................................................... 188 6.1 字符串输入/输出................................................................................................................................. 189 字符串输出 ................................................................................................................................... 189 字符串输入 ................................................................................................................................... 194 总结 ............................................................................................................................................... 203 6.2 字符串长度 .......................................................................................................................................... 203 6.3 字符串拼接 .......................................................................................................................................... 205 6.4 字符串拷贝 .......................................................................................................................................... 206 6.5 内存填充 .............................................................................................................................................. 208 6.6 字符串比较 .......................................................................................................................................... 210 6.7 字符串查找 .......................................................................................................................................... 212 6.8 字符串与数字互转 .............................................................................................................................. 215 字符串转整形数据 ....................................................................................................................... 215 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com 7 I.MX6U 嵌入式 Linux C 应用编程指南 字符串转浮点型数据 ................................................................................................................... 218 数字转字符串 ............................................................................................................................... 220 6.9 给应用程序传参 .................................................................................................................................. 221 6.10 正则表达式 ........................................................................................................................................ 222 初识正则表达式 ......................................................................................................................... 222 元字符与普通字符 ..................................................................................................................... 223 字符集 ......................................................................................................................................... 223 匹配次数 ..................................................................................................................................... 223 贪婪与非贪婪 ............................................................................................................................. 223 匹配 x 或 y(|).......................................................................................................................... 223 组的概念 ..................................................................................................................................... 223 边界匹配符 ................................................................................................................................. 223 常用正则表达式 ......................................................................................................................... 223 6.11 C 语言中使用正则表达式.................................................................................................................. 223 系统信息与系统资源 ....................................................................................................................... 226 7.1 系统信息 .............................................................................................................................................. 227 系统标识 uname............................................................................................................................ 227 sysinfo 函数.................................................................................................................................... 228 gethostname 函数........................................................................................................................... 230 sysconf()函数 ................................................................................................................................. 231 7.2 时间、日期 .......................................................................................................................................... 232 时间的概念 ................................................................................................................................... 232 Linux 系统中的时间...................................................................................................................... 234 获取时间 time/gettimeofday ......................................................................................................... 235 时间转换函数 ............................................................................................................................... 237 设置时间 settimeofday.................................................................................................................. 246 总结 ............................................................................................................................................... 246 7.3 进程时间 .............................................................................................................................................. 247 times 函数....................................................................................................................................... 247 clock 函数....................................................................................................................................... 250 7.4 产生随机数 .......................................................................................................................................... 251 7.5 休眠...................................................................................................................................................... 253 秒级休眠: sleep............................................................................................................................. 253 微秒级休眠: usleep ....................................................................................................................... 254 高精度休眠: nanosleep ................................................................................................................. 255 7.6 申请堆内存 .......................................................................................................................................... 256 在堆上分配内存:malloc 和 free ................................................................................................ 256 在堆上分配内存的其它方法 ....................................................................................................... 258 分配对其内存 ............................................................................................................................... 259 7.7 proc 文件系统....................................................................................................................................... 263 proc 文件系统的使用 .................................................................................................................... 264 7.8 定时器.................................................................................................................................................. 266 信号:基础 ....................................................................................................................................... 267 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com 8 I.MX6U 嵌入式 Linux C 应用编程指南 8.1 基本概念 .............................................................................................................................................. 268 8.2 信号的分类 .......................................................................................................................................... 270 可靠信号与不可靠信号 ............................................................................................................... 270 实时信号与非实时信号 ............................................................................................................... 271 8.3 常见信号与默认行为 .......................................................................................................................... 271 8.4 进程对信号的处理 .............................................................................................................................. 273 signal()函数.................................................................................................................................... 274 sigaction()函数 ............................................................................................................................... 277 8.5 向进程发送信号 .................................................................................................................................. 280 kill()函数 ........................................................................................................................................ 280 raise().............................................................................................................................................. 282 8.6 alarm()和 pause()函数........................................................................................................................... 283 alarm()函数..................................................................................................................................... 284 pause()函数..................................................................................................................................... 285 8.7 信号集.................................................................................................................................................. 287 初始化信号集 ............................................................................................................................... 287 向信号集中添加/删除信号 .......................................................................................................... 287 测试信号是否在信号集中 ........................................................................................................... 288 8.8 获取信号的描述信息 .......................................................................................................................... 288 strsignal()函数................................................................................................................................ 289 psignal()函数.................................................................................................................................. 290 8.9 信号掩码(阻塞信号传递).................................................................................................................... 291 8.10 阻塞等待信号 sigsuspend()............................................................................................................... 294 8.11 实时信号 ............................................................................................................................................ 296 sigpending()函数.......................................................................................................................... 296 发送实时信号 ............................................................................................................................. 297 8.12 异常退出 abort()函数 ........................................................................................................................ 299 进程 ................................................................................................................................................... 302 9.1 进程与程序 .......................................................................................................................................... 303 main()函数由谁调用?.................................................................................................................. 303 程序如何结束? ........................................................................................................................... 303 何为进程? ................................................................................................................................... 304 进程号 ........................................................................................................................................... 304 9.2 进程的环境变量 .................................................................................................................................. 307 应用程序中获取环境变量 ........................................................................................................... 308 添加/删除/修改环境变量 ............................................................................................................. 310 清空环境变量 ............................................................................................................................... 312 环境变量的作用 ........................................................................................................................... 313 9.3 进程的内存布局 .................................................................................................................................. 313 9.4 进程的虚拟地址空间 .......................................................................................................................... 314 9.5 fork()创建子进程.................................................................................................................................. 315 9.6 父、子进程间的文件共享 .................................................................................................................. 318 9.7 系统调用 vfork().................................................................................................................................. 322 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com 9 I.MX6U 嵌入式 Linux C 应用编程指南 9.8 fork()之后的竞争条件.......................................................................................................................... 324 9.9 进程的诞生与终止 .............................................................................................................................. 327 进程的诞生 ................................................................................................................................... 327 进程的终止 ................................................................................................................................... 328 9.10 监视子进程 ........................................................................................................................................ 330 wait()函数..................................................................................................................................... 330 waitpid()函数................................................................................................................................ 333 waitid()函数.................................................................................................................................. 337 僵尸进程与孤儿进程 ................................................................................................................. 337 SIGCHLD 信号............................................................................................................................ 341 9.11 执行新程序 ........................................................................................................................................ 343 execve()函数................................................................................................................................. 343 exec 库函数.................................................................................................................................. 345 exec 族函数使用示例.................................................................................................................. 347 system()函数................................................................................................................................. 349 9.12 进程状态与进程关系 ........................................................................................................................ 351 进程状态 ..................................................................................................................................... 351 进程关系 ..................................................................................................................................... 352 9.13 守护进程 ............................................................................................................................................ 356 何为守护进程 ............................................................................................................................. 356 编写守护进程程序 ..................................................................................................................... 357 SIGHUP 信号............................................................................................................................... 360 9.14 单例模式运行 .................................................................................................................................... 362 通过文件存在与否进行判断 ..................................................................................................... 362 使用文件锁 ................................................................................................................................. 364 进程间通信简介 ............................................................................................................................... 367 10.1 进程间通信简介 ................................................................................................................................ 368 10.2 进程间通信的机制有哪些? ............................................................................................................ 368 10.3 管道和 FIFO....................................................................................................................................... 368 10.4 信号.................................................................................................................................................... 369 10.5 消息队列 ............................................................................................................................................ 369 10.6 信号量 ................................................................................................................................................ 369 10.7 共享内存 ............................................................................................................................................ 369 10.8 套接字(Socket) ............................................................................................................................. 369 线程 ............................................................................................................................................... 371 11.1 线程概述 ............................................................................................................................................ 372 线程概念 ..................................................................................................................................... 372 并发和并行 ................................................................................................................................. 373 11.2 线程 ID............................................................................................................................................... 375 11.3 创建线程 ............................................................................................................................................ 376 11.4 终止线程 ............................................................................................................................................ 378 11.5 回收线程 ............................................................................................................................................ 380 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com 10 I.MX6U 嵌入式 Linux C 应用编程指南 11.6 取消线程 ............................................................................................................................................ 382 取消一个线程 ............................................................................................................................. 382 取消状态以及类型 ..................................................................................................................... 384 取消点 ......................................................................................................................................... 386 线程可取消性的检测 ................................................................................................................. 388 11.7 分离线程 ............................................................................................................................................ 391 11.8 注册线程清理处理函数 .................................................................................................................... 393 11.9 线程属性 ............................................................................................................................................ 398 线程栈属性 ................................................................................................................................. 398 分离状态属性 ............................................................................................................................. 400 11.10 线程安全 .......................................................................................................................................... 401 线程栈 ....................................................................................................................................... 401 可重入函数 ............................................................................................................................... 402 线程安全函数 ........................................................................................................................... 408 一次性初始化 ........................................................................................................................... 410 线程特有数据 ........................................................................................................................... 412 线程局部存储 ........................................................................................................................... 419 11.11 更多细节问题 .................................................................................................................................. 420 线程与信号 ............................................................................................................................... 421 线程与 fork................................................................................................................................ 425 线程与 I/O................................................................................................................................. 425 11.12 总结.................................................................................................................................................. 425 线程同步 ....................................................................................................................................... 426 12.1 为什么需要线程同步? .................................................................................................................... 427 12.2 互斥锁 ................................................................................................................................................ 430 互斥锁初始化 ............................................................................................................................. 431 互斥锁加锁和解锁 ..................................................................................................................... 431 pthread_mutex_trylock()函数....................................................................................................... 434 销毁互斥锁 ................................................................................................................................. 436 互斥锁死锁 ................................................................................................................................. 438 互斥锁的属性 ............................................................................................................................. 439 12.3 条件变量 ............................................................................................................................................ 440 条件变量初始化 ......................................................................................................................... 442 通知和等待条件变量 ................................................................................................................. 443 条件变量的判断条件 ................................................................................................................. 445 条件变量的属性 ......................................................................................................................... 445 12.4 自旋锁 ................................................................................................................................................ 446 自旋锁初始化 ............................................................................................................................. 446 自旋锁加锁和解锁 ..................................................................................................................... 447 12.5 读写锁 ................................................................................................................................................ 449 读写锁初始化 ............................................................................................................................. 450 读写锁上锁和解锁 ..................................................................................................................... 450 读写锁的属性 ............................................................................................................................. 453 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com 11 I.MX6U 嵌入式 Linux C 应用编程指南 12.6 总结.................................................................................................................................................... 454 12.7 练习.................................................................................................................................................... 454 高级 I/O......................................................................................................................................... 455 13.1 非阻塞 I/O.......................................................................................................................................... 456 阻塞 I/O 与非阻塞 I/O 读文件................................................................................................... 456 阻塞 I/O 的优点与缺点.............................................................................................................. 460 使用非阻塞 I/O 实现并发读取.................................................................................................. 461 13.2 I/O 多路复用....................................................................................................................................... 464 何为 I/O 多路复用...................................................................................................................... 464 select()函数介绍........................................................................................................................... 464 poll()函数介绍 ............................................................................................................................. 468 13.3 异步 IO............................................................................................................................................... 472 13.4 优化异步 I/O...................................................................................................................................... 474 使用实时信号替换默认信号 SIGIO.......................................................................................... 475 使用 sigaction()函数注册信号处理函数 ................................................................................... 475 使用示例 ..................................................................................................................................... 476 13.5 存储映射 I/O...................................................................................................................................... 478 mmap()和 munmap()函数............................................................................................................ 479 mprotect()函数 ............................................................................................................................. 484 msync()函数 ................................................................................................................................. 484 普通 I/O 与存储映射 I/O 比较................................................................................................... 485 13.6 文件锁 ................................................................................................................................................ 486 flock()函数加锁 ........................................................................................................................... 487 fcntl()函数加锁 ............................................................................................................................ 492 lockf()函数加锁 ........................................................................................................................... 504 13.7 小结.................................................................................................................................................... 504 本篇总结 ....................................................................................................................................... 505 第二篇 提高篇 ............................................................................................................................................... 506 点亮 LED....................................................................................................................................... 507 15.1 应用层操控硬件的两种方式 ............................................................................................................ 508 sysfs 文件系统 ............................................................................................................................. 508 sysfs 与/sys................................................................................................................................... 508 总结 ............................................................................................................................................. 509 15.2 LED 硬件控制方式............................................................................................................................. 509 15.3 编写 LED 应用程序........................................................................................................................... 511 15.4 在开发板上测试 ................................................................................................................................ 514 GPIO 应用编程............................................................................................................................. 515 16.1 应用层如何操控 GPIO...................................................................................................................... 516 16.2 编写应用程序 .................................................................................................................................... 518 16.3 在开发板上测试 ................................................................................................................................ 521 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com 12 I.MX6U 嵌入式 Linux C 应用编程指南 输入设备应用编程 ....................................................................................................................... 523 17.1 输入类设备编程介绍 ........................................................................................................................ 524 什么是输入设备 ......................................................................................................................... 524 input 子系统................................................................................................................................. 524 读取数据的流程 ......................................................................................................................... 524 应用程序如何解析数据 ............................................................................................................. 524 17.2 编写程序读取输入设备的数据 ........................................................................................................ 527 17.3 在开发板上测试 ................................................................................................................................ 528 17.4 读取触摸屏数据 ................................................................................................................................ 532 FrameBuffer 应用编程.................................................................................................................. 537 18.1 什么是 FrameBuffer........................................................................................................................... 538 18.2 LCD 的基础知识 ................................................................................................................................ 538 18.3 LCD 应用编程介绍 ............................................................................................................................ 538 使用 ioctl()获取屏幕参数信息................................................................................................... 538 使用 mmap()将显示缓冲区映射到用户空间............................................................................ 543 18.4 LCD 应用编程练习之刷 LCD 背景颜色........................................................................................... 543 18.5 LCD 应用编程练习之 LCD 打点 ...................................................................................................... 547 18.6 LCD 应用编程练习之显示 BMP 图片.............................................................................................. 551 BMP 图像介绍............................................................................................................................. 551 编写应用程序 ............................................................................................................................. 558 在开发板上测试 ......................................................................................................................... 563 18.7 练习.................................................................................................................................................... 564 PWM 应用编程............................................................................................................................. 565 V4L2 摄像头应用编程................................................................................................................. 565 串口应用编程 ........................................................................................................................... 565 看门狗应用编程 ....................................................................................................................... 565 音频应用编程 ........................................................................................................................... 566 CAN 应用编程.......................................................................................................................... 566 USB 应用编程........................................................................................................................... 566 网络编程基础 ........................................................................................................................... 566 第三篇 进阶篇 ............................................................................................................................................... 567 链接库 ....................................................................................................................................... 567 cmake 入门................................................................................................................................ 567 cmake 进阶................................................................................................................................ 567 使用 syslog 生成日志信息 ........................................................................................................... 567 应用程序调试手段 ................................................................................................................... 567 小项目实战之 MQTT............................................................................................................... 567 原子哥在线教学:www.yuanzige.com 论坛:www.openedv.com 13 I.MX6U 嵌入式 Linux C 应用编程指南 小项目实战之未完待续! ....................................................................................................... 567 小项目实战之规划中 ............................................................................................................... 567