The Linux Programming Interface

  • 基本概念
    • 操作系统的核心-内核
    • shell
    • 用户和组
    • 单根目录层级、目录、链接和文件
    • 文件 I/O 模型
    • 程序
    • 进程
    • 内存映射
    • 静态库和动态库
    • 进程间通信及同步
    • 信号
    • 线程
    • 进程组和 shell 任务控制
    • 会话、控制终端和控制进程
    • 伪终端
    • 日期和时间
    • 客户端/服务端架构
    • 实时性
    • /proc 文件系统
  • 系统编程概念
    • 系统调用
    • 库函数
    • 标准 C 语言函数库:GNU C 语言函数库 (glibc)
    • 处理来自系统调用和库函数的错误
  • 文件 I/O:通用的 I/O 模型
    • 通用 I/O
    • 打开一个文件:open
    • 读取文件内容:read
    • 数据写入文件:write
    • 关闭文件:close
    • 改变文件偏移量:lseek
    • 通用 I/O 以外的操作:ioctl
  • 深入探究文件 I/O
    • 原子操作和竞争条件
    • 文件控制操作:fnctl
    • 打开文件的状态标识
    • 文件描述符和打开文件之间的关系
    • 复制文件描述符
    • 在文件特定偏移量处的 I/O:pread 和 pwrite
    • 分散输入和集中输出:readv 和 writev
    • 截断文件:truncate 和 ftruncate
    • 非阻塞 I/O
    • 大文件 I/O
    • /dev/fd 目录
    • 创建临时文件
  • 进程
    • 进程和程序
    • 进程号和父进程号
    • 进程内存布局
    • 虚拟内存管理
    • 栈和栈帧
    • 命令行参数
    • 环境列表
    • 执行非局部跳转:setjmp 和 longjmp
  • 内存分配
    • 在堆上分配内存
      • 调整 program break:brk 和 sbrk
      • malloc 和 free
      • 其他方法
    • 在堆栈上分配内存:alloca
  • 用户和组
    • 密码文件:/etc/passwd
    • shadow 密码文件:/etc/shadow
    • 组文件:/etc/group
    • 获取用户和组的信息
    • 密码加密和用户认证
  • 进程凭证
    • 实际用户 ID 和实际组 ID
    • 有效用户 ID 和有效组 ID
    • Set-User-ID, Set-Group-ID 程序
    • 保存 set-user-ID, 保存 set-group-ID
    • 文件系统用户 ID 和组 ID
    • 获取和修改进程凭证
  • 时间
    • 日历时间
    • 时间转换函数
    • 时区
    • 地区
    • 更新系统时钟
    • 软件时钟
    • 进程时间
  • 系统限制与选项
    • 系统限制
    • 在运行时获取系统限制【选项】
    • 运行时获取与文件相关的限制【选项】
    • 不确定的限制
    • 系统选项
  • 系统和进程信息
    • /proc 文件系统
      • 获取与进程有关的信息: /proc/PID
      • /proc 目录下的系统信息
      • 访问 /proc 文件
    • 系统标识 uname()
  • 文件 I/O 缓冲
    • 文件 I/O 的内核缓冲: 缓冲区高速缓存
    • stdio 库的缓冲
    • 控制文件 I/O 的内核缓冲
    • 向内核提出 I/O 模式建议
    • 绕过缓冲区高速缓存: 直接 I/O
    • 混合使用库函数和系统调用进行文件 I/O
  • 系统编程概念
    • 设备专用文件
    • 磁盘和分区
    • 文件系统
    • inode
    • 虚拟文件系统
    • 日志文件系统
    • 单根目录层级和挂载点
    • 文件系统的挂载和卸载: mount, umount, umount2
    • 高级挂载特性
      • 在多个挂载点挂载文件系统
      • 多次挂载同一挂载点
      • 基于每次挂载的挂载标识
      • 绑定挂载
      • 递归绑定挂载
    • 虚拟内存文件系统: tmpfs
    • 获得与文件系统有关的信息: statvfs()
  • 文件属性
    • 获取文件信息: stat
    • 文件时间戳: utime, utimes, utimensat, futimens
    • 文件属主: chown, fchown, lchown
    • 文件权限
      • 普通文件的权限
      • 目录权限
      • 权限检查算法
      • 检查对文件的访问权限: access
      • Set-User-ID, Set-Group-ID, Sticky 位
      • 进程的文件模式创建掩码: umask
      • 更改文件权限: chmod, fchmod
    • Inode 标志
  • 扩展属性 (Extend Attribute)
  • 访问控制列表
    • ACL 权限检查算法
    • ACL 的长短文本格式
    • ACL_mask 型 ACE 和 ACL 组分类
    • getfacl 和 setfacl 命令
    • 默认 ACL 与文件创建
    • ACL 在实现上的限制
    • ACL API
  • 目录与链接
    • 目录与【硬】链接
    • 符号【软】链接
    • 创建和移除【硬】链接: link, unlink
    • 更改文件名: rename
    • 使用符号链接: symlink, readlink
    • 创建和移除目录: mkdir, rmdir
    • 移除一个文件或目录: remove
    • 读目录: opendir, readdir
    • 文件树遍历: nftw
    • 进程的当前工作目录
    • 针对目录文件描述符的相关操作
    • 改变进程的根目录: chroot
    • 解析路径名: realpath
    • 解析路径名字符串: dirname, basename
  • 监控文件事件
    • inotify API
    • inotify 事件
    • 读取 inotify 事件
    • 队列限制和 /proc 文件
    • 监控文件的就有系统: dnotify
Licensed under CC BY-NC-SA 4.0
Get Things Done
Built with Hugo
Theme Stack designed by Jimmy