Linux环境高级编程

一、课程目标

本次课程涵盖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 - 进程间通信
    • 课程回顾与总结

六、课程资源

可获取的课程资源见:教学资源。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。