嵌入式工程师自我修养-Linux系统编程系列课程
- 第00期:入门篇
- 0.1 什么是系统编程t?
- 0.2 一个系统编程的例子(上)t
- 0.3 一个系统编程的例子(下)t
- 0.4 系统调用与C标准库
- 0.5 POSIX标准
- 0.6 系统编程必备技能(上) man命令
- 0.7 系统编程必备技能(中) info命令
- 0.8 系统编程必备技能(下) strace命令
- 0.9 系统调用错误处理
- 0.10 GNU编码风格
- 0.11 Linux哲学 一切皆文件
- 0.12 编程实战 音频播放器(上)
- 0.13 编程实战 音频播放器(下)t
- 0.14 后续课程学习路线t
- 第01期:揭开文件系统的神秘面纱
- 1.1 本期课程规划t
- 1.2 文件在磁盘上的存储(上)t
- 1.3 文件在磁盘上的存储(下)
- 1.4 文件在Flash上的存储(上)
- 1.5 文件在Flash上的存储(下)
- 1.6 文件系统索引节点 inode
- 1.7 超级块 superblock
- 1.8 目录和目录项
- 1.9 文件路径解析
- 1.10 文件系统的挂载
- 1.11 文件系统类型
- 1.12 虚拟文件系统 VFS
- 1.13 文件描述符
- 1.14 文件指针
- 1.15 硬链接和软链接
- 1.16 一些命令
- 1.17 实验 磁盘格式化及挂载
- 1.18 实验 恢复删除的文件t
- 第02期:文件IO编程实战
- 2.1 本期课程简介t
- 2.2 文件的打开模式t
- 2.3 文件的读写权限t
- 2.4 文件的读写函数
- 2.5 文件读写位置与定位
- 2.6 获取文件的属性信息
- 2.7 实现shell命令 ll
- 2.8 读取目录文件内容
- 2.9 实现ls命令 支持多个目录
- 2.10 实现ls命令 支持-c参数
- 2.11 音频播放器 实现循环列表播放
- 2.12 实现ls命令 支持-l参数
- 2.13 有关目录的其它操作
- 2.14 相对路径转绝对路径
- 2.15 编程实战 实现 wc 命令(上)
- 2.16 编程实战 实现 wc 命令(中)
- 2.17 编程实战 实现 wc 命令(下)
- 第03期:文件IO缓存与内存映射
- 3.1 缓存的基本概念t
- 3.2 页高速缓存(上)t
- 3.3 页高速缓存(中)
- 3.4 页高速缓存(下)
- 3.5 块设备驱动架构
- 3.6 用户空间的IO缓存
- 3.7 Scatter_Gather IO
- 3.8 直接IO
- 3.9 将文件映射到内存
- 3.10 文件映射内存的实现
- 3.11 将设备映射到内存
- 第04期:打通进程与终端的任督二脉
- 4.1 进程 程序运行的“牌照”t
- 4.2 创建一个进程 fork t
- 4.3 子进程的运行 借壳上市
- 4.4 写时复制与vfork
- 4.5 进程的退出 exit
- 4.6 进程的退出 exit与_exit
- 4.7 进程的退出 vfork与exit
- 4.8 等待子进程终止 wait
- 4.9 进程调度
- 4.10 进程状态
- 4.11 进程的UID和GID
- 4.12 通过proc查看进程资源
- 4.13 与进程通信 信号
- 4.14 终端与控制台
- 4.15 进程组与会话
- 4.16 前台进程和后台进程
- 4.17 守护进程
- 4.18 僵尸进程
- 4.19 孤儿进程
- 4.20 0号进程和1号进程
- 4.21 小结 Linux进程全景图
- 第05期:进程间通信
- 5.1 什么是IPC?t_
- 5.2 无名管道(1) PIPE编程实例5
- 5.3 无名管道(2) shell中的管道实现_ev
- 5.4 无名管道(3) 通过管道与shell命令进行通信
- 5.5 无名管道(4) 通过管道同步进程
- 5.6 命名管道 FIFO
- 5.7 FIFO应用 LOG日志系统的实现
- 5.8 FIFO应用 服务端与客户端通信
- 5.9 IPC 对象和 IPC key
- 5.10 system V 消息队列
- 5.11 消息队列应用 点对点通信
- 5.12 消息队列应用 多人聊天室
- 5.13 system V 共享内存
- 5.14 system V 信号量
- 5.15 信号量编程应用 对共享内存的同步访问
- 5.16 信号量编程应用 生产者-消费者模型
- 5.17 POSIX IPC简介
- 5.18 消息队列(上) API编程实例
- 5.19 消息队列(中) 异步通知
- 5.20 消息队列(下) 内核实现
- 5.21 POSIX 信号量
- 5.22 POSIX 共享内存
- 5.23 文件锁
- 5.24 信号机制 signal
- 5.25 编写安全的信号处理函数
- 5.26 信号底层API sigaction函数
- 5.27 Linux新增API signalfd
- 5.28 Linux新增API timerfd
- 5.29 Linux新增API eventfd
- 5.30 D-BUS总线简介及小结
- 第06期:从零实现一个shell解释器
- 6.1 什么是shell解释器t
- 6.2 shell命令的执行过程t
- 6.3 在子进程中运行shell命令
- 6.4 解析用户输入的命令并执行
- 6.5 代码优化及封装
- 6.6 打印彩色命令提示符
- 6.7 实现shell内建命令 cd
- 6.8 实现shell内建命令 exit
- 6.9 增加对信号的处理操作
- 6.10 支持进程的后台运行
- 6.13 实现脚本的解析和运行
- 6.15 shell变量的实现
- 6.16 设置shell的环境变量
- 6.17 实现shell的export命令
- 6.18 代码优化及小结
- 第07期:多线程编程入门
- 7.1 多线程编程的概念t_ev
- 7.2 多线程学习准备工作t
- 7.3 创建一个新线程 pthread_create_ev
- 7.4 线程的终止
- 7.5 等待线程的终止
- 7.6 线程属性
- 7.7 线程的调度与运行
- 7.8 线程安全
- 7.9 线程同步 互斥锁
- 7.10 线程同步 条件变量(上)
- 7.11 线程同步 条件变量(下)
- 7.12 线程同步 读写锁
- 7.13 线程池的概念
- 7.14 超线程技术
- 7.15 线程的概念
- 第08期:时间管理和定时器编程
- 8.1 时间的概念5
- 8.2 时间的计量
- 8.3 Linux系统中的时间管理
- 8.4 获取当前的时间
- 8.5 时间格式转换
- 8.6 将时间转换为字符串
- 8.7 用户指定格式的字符串
- 8.8 获取高精度时间 微秒
- 8.9 获取高精度时间 纳秒
- 8.10 Linux中的定时器 alarm
- 8.11 Linux中的定时器 interval timer
- 8.12 Linux中的定时器 POSIX timer(上)
- 8.13 Linux中的定时器 POSIX timer(下)
- 练手项目:使用C语言实现协程
- 1. 什么是协程?t
- 2.协程的实现原理t
- 3. 保存和设置当前函数上下文
- 4.添加项目的Makefile
- 5. 继续完善我们的API
- 6. 使用POSIX API getcontext
- 7. 使用POSIX API makecontext
- 8. 使用POSIX API swapcontext
- 9. 使用swapcontext切换func1和func2
- 10. 实现协程的API coroutine_create
- 11. 实现协程的API coroutine_yield
- 12. 实现协程的API coroutine_resume
- 13. 优化coroutine_yield的参数
- 14. 支持给协程传递参数
- 15. 修改协程栈为动态内存
- 16. 支持用户指定协程栈大小
- 17. 一个测试应用程序