Linux环境高级编程

系统 1637 0

Linux环境高级编程

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

六、课程资源

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

Linux环境高级编程


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论