Linux环境高级编程
2011-08-20 14:09一、课程目标
本次课程涵盖Linux系统编程的几个主要方面,通过本次课程的学习,学员将具备以下能力:
- 了解Linux系统调用和类库的区别;
- 熟悉文件I/O、文件和目录、进程管理、进程间通信(IPC)、信号、时间与定时器的编程。
二、参训要求
参加本次课程的学员须具备以下能力:
- 本次课程使用 C语言 教学,所以学员需拥有较好的C语言基础;
- 能熟练使用常用的Linux命令;
- 能熟练使用gcc、gdb、熟练撰写makefile;
- 最好熟练使用vi、emacs等文本编辑器其中的一种。
三、课程实践环境
- 学员自备电脑
- 操作系统:GNU/Linux 2.6+(建议使用Redhat AS 5+或Ubuntu、Fedora)
- 编译器:GCC v4.1+、GDB v7.0+
- 可选IDE:Eclipse CDT
四、课程大纲
本次课程由以下几个部分构成:
1、 预备知识
- UNIX历史和标准
- UNIX; BSD & System V
- GNU project; Linux Kernel
- POSIX, SUSv3, SUSv4
- Linux系统相关概念
- 系统调用和库函数
- 错误处理
- 特性测试宏
- 系统数据类型
- 系统限制和选项 (sysconf(), pathconf())
- 系统参数: /proc文件系统
2、文件I/O
- Linux I/O系统调用与C标准库stdio的比较
- I/O系统调用: open(), close(), read(), write()
- 控制I/O的Buffer
- 读写指针的定位:lseek()
- I/O控制:ioctl()
- 原子操作和数据竞态
- 文件控制: fcntl()
- 文件打开的状态标志(status flags)
- 文件描述符
- 复制文件描述符:dup(), dup2()
3、文件和目录
- 文件属性
- 获取文件的属性:stat()
- 文件的时间戳
- 文件的所有权:chown()
- 文件的操作权限:chmod()
- 目录和连接文件
- 硬连接和软连接 (符号连接)
- 目录
- 迭代目录树
- 当前工作目录(CWD)
- 路径名
- 监控文件系统的事件:inotify
- inotify API
- inotify事件
- inotify限制
4、 进程控制
- 进程属性
- 进程ID(PID)和父进程ID(PPID)
- 进程内存布局
- 栈 (Stack)
- 堆 (Heap)
- 命令行参数和环境变量列表
- 非局部goto (nonlocal goto): setjmp() 和 longjmp()
- 创建和终止进程
- 创建进程:fork()
- fork() 后的多进程数据竞态
- 进程终止:exit(3) 和 _exit(2)
- 退出处理器:atexit()
- 等待子进程的退出:wait(), waitpid(), waitid()
- SIGCHLD 信号
- 执行程序
- execve()
- exec() 系列库函数
- 解释脚本
- 文件描述符和 exec()
- 信号和 exec()
- 执行Shell命令:system()
- 守护进程 (Daemons)
- 创建守护进程的几个步骤
- 使用 SIGHUP 信号使一个进程变成守护进程
- 系统中守护进程的示例:syslog
- 进程权限相关
- 文件 /etc/passwd 和 /etc/group
- User ID, and Group ID
- Real, effective, and saved set IDs
- 其它 group IDs
- Set-user-ID and set-group-ID programs
- 获取或修改进程权限
5、信号 (Signals)
- 信号类型和默认动作
- 信号处理方式
- 信号处理器
- 发送信号
- 信号集
- 阻塞信号(signal mask)
- 系统调用的中断和重新执行
- 等待信号
6、时间和定时器(Timers)
- 时间相关的数据类型
- POSIX Clock
- 获取当前时间
- 设置当前时间
- C标准库 时间函数
- Sleep
- 定时器(Timers)
- 简单的定时器:alarm()
- interval Timers
- 高级定时器
7、进程间通信 (Interprocess Communication, IPC)
- 传统UNIX IPC
- 管道和优先队列 (Pipe and FIFO)
- SYSV 消息队列 (SYSV Message Queue)
- SYSV 信号量 (SYSV Semaphore)
- SYSV 共享内存 (SYSV Shared Memory Segments)
- 内存映射文件 (Memory Mapping Files)
- POSIX IPC
- POSIX IPC的优势
- POSIX 消息队列 (POSIX Message Queue)
- POSIX 信号量 (POSIX Semaphore)
- POSIX 共享内存 (POSIX Shared Memory Segments)
五、时间安排
课程时间:3天,以每天6小时计,具体安排如下:
- Day1
- 1 - 预备知识
- 2 - 文件I/O
- 3 - 文件与目录
- Day2
- 4 - 进程控制
- 5 - 信号
- 6 - 定时器
- Day3
- 7 - 进程间通信
- 课程回顾与总结
六、课程资源
可获取的课程资源见: 教学资源 。