第一章 Linux软件开发工具
1. 1 gcc和g++
1. 1. l 全局选项
l. 1. 2 语言选项
1. 1. 3 预处理程序选项
1. 1. 4 汇编程序选项
1. 1. 5 连接程序选项
1. 1. 6 目录选项
1. 1. 7 忧化选项
l. 1. 8 调试选项
1. 1. 9 警告选项
1. 2 gnu make
1. 2. l make命令的输入文件
1. 2. 2 gnu make
1. 3 autoconf
1. 3. 1 configure. in文件的获得
1. 3. 2 aclocal. m4文件和acsite. m4文件的获得
l. 3. 3 configure脚本的生成
1. 3. 4 configure脚本的执行
1. 3. 5 软件包的发行和使用
1. 3. 6 autoconf的流程框图
1. 4 automake
1. 4. 1 编写Makefile. am文件
1. 4. 2 修改configure. in文件
1. 4. 3 执行automake
1. 4. 4 automake使用实例
1. 5 gdb
1. 5. 1 gdb的命令行选项及参数
1. 5. 2 gdb的内部命令
1. 5. 3 gdb应用示例
1. 6 KDevelop
1. 6. 1 KDevelop特性
1. 6. 2 KDevelop对系统的要求
1. 6. 3 KDevelop的获取. 安装及启动
1. 6. 4 KDevelop使用
l. 7 wpe和xwpe
第二章 文件系统
2. l 文件系统简介
2. 1. l 概述
2. 1. 2 文件模式
2. 1. 3 进程的umask
2. 2 Linux文件系统简介
2. 2. 1 EXt2文件系统的结构
2. 2. 2 超级块
2. 2. 3 组描述符
2. 2. 4 inode
2. 2. 5 目录结构
2. 2. 6 Ext2磁盘空间的分配策略
2. 3 基本文件操作
2. 3. l 文件描述符和流
2. 3. 2 打开关闭文件
2. 3. 3 文件共享
2. 3. 4 顺序文件读写
2. 3. 5 随机文件读写
2. 3. 6 其他文件操作
2. 4 inode的操作
2. 4. l 查询inode信息
2. 4. 2 存取权限
2. 4. 3 文件所有权
2. 4. 4 时间属性
2. 4. 5 EXt2扩展属性
2. 5 特殊文件
2. 5. l 硬连接和符号连接
2. 5. 2 创建设备文件和管道
2. 5. 3 /dev/fd
第三章 目录操作
3. l 当前目录
3. 1. l 获得当前目录
3. 1. 2 设置当前目录
3. 1. 3 改变根目录
3. 2 创建删除目录
3. 3 浏览目录
3. 4 名字匹配
3. 4. 1 使用子进程
3. 4. 2 内部匹配
第四章 高级I/O操作
4. 1 同时进行多个I/O操作(I/O复用)
4. 1. 1 轮询方式
4. 1. 2 使用非阻塞I/O
4. 1. 3 效率较高的I/O复用
4. 1. 4 系统调用poll
4. 2 内存映像
4. 2. l 分配页面
4. 2. 2 建立内存映像
4. 2. 3 内存与磁盘的同步
4. 3 给内存区加锁
4. 4 文件加锁
4. 4. l 文件锁
4. 4. 2 记录锁
4. 4. 3 死锁
4. 4. 4 锁的继承与释放
4. 4. 5 建议锁与强制锁
4. 5 非连续区域读写
第五章 系统数据文件和系统信息
5. 1 简介
5. 2 密码文件
5. 2. l /etc/passwd文件和passwd结构
5. 2. 2 有关的函数接口
5. 2. 3 密码的shadow机制
5. 3 组(groups)
5. 3. l /etc/group文件和group结构
5. 3. 2 有关的函数接口
5. 3. 3 附加组
5. 4 其他数据文件
5. 5 有关用户登录的系统文件
5. 6 系统标识
5. 7 系统时钟
第六章 进程模型与进程关系
6. l 进程
6. 2 线程
6. 3 启动例程
6. 4 终止进程
6. 5 atexit函数
6. 6 命令行参数
6. 7 环境变量列表
6. 8 C程序在内存中的分布
6. 9 共享库
6. 10 内存分配机制
6. 10. 1 alloca函数
6. 11 环境变量的访问与修改
6. 12 setjmp和longjmp函数
6. 13 使用局部变量的问题
6. 14 getrlimit和setrlimit函数
6. 15 getrusage函数
6. 16 终端登录
6. 16. 1 4.3+BSD终端登录
6. 16. 2 SVR4终端登录
6. 16. 3 4. 3+BSD网络登录
6. 17 进程组
6. 18 会话
6. 19 控制终端
6. 20 tcgetpgrp和tcsetpgrp函数
6. 21 作业控制
6. 22 程序在shell下的运行
6. 23 孤儿进程组
6. 24 4.3+BSD对进程关系实现
第七章 进程控制
7. 1 进程标识
7. 2 fork函数
7. 3 exit函数
7. 4 wait和waitpid函数
7. 5 wait3和wait4函数
7. 6 竞争条件
7. 7 exec函数
7. 8 Setuid和setgid函数
7. 9 setreuid和setregid函数
7. 10 seteuid和setegid函数.
7. 11 system函数
7. 12 getlogin函数
7. 13 times函数
7. 14 守护进程
7. 14. l 守护过程的特点
7. 14. 2 守护进程的例子
7. 14. 3 syslog函数
第八章 进程间通信
8. l 管道和命名管道
8. 1. l 管道
8. 1. 2 流管道
8. 1. 3 FIFO
8. 2 System V IPC
8. 2. 1 System VIPC访问方式
8. 2. 2 消息队列
8. 2. 3 信号量
8. 2. 4 共享内存
8. 2. 5 System V IPC使用总结
第九章 信号处理
9. l 概述
9. 2 LINUX系统中的信号
9. 3 对信号的处理
9. 3. l 设置信号处理函数
9. 3. 2 系统对信号的处理
9. 3. 3 不可靠的信号
9. 3. 4 信号的阻塞
9. 3. 5 向进程发送信号
9. 3. 6 用定时器使进程睡眠
9. 3. 7 信号与系统调用
9. 3. 8 信号集
9. 3. 9 使用信号集屏蔽信号
9. 3. 10 设置信号的处理函数
9. 3. 11 非局部跳转
9. 3. 12 屏蔽信号并使进程等待
9. 3. 13 使进程退出
9. 3. 14 等待一个过程结束
9. 3. 15 实现函数system的一种方法
9. 3. 16 实现函数sleep的一种方法
9. 3. 17 作业控制信号
第十章 终端及伪终端编程
10. l 引言
10. 1. 1 终端
10. l. 2 终端驱动程序
10. 1. 3 系统与终端之间的关系
10. 1. 4 版本
10. 2 UNIX/Linux中的终端
10. 2. 1 概述
10. 2. 2 控制终端
10. 2. 3 数据传输
10. 2. 4 正则模式和非正则模式
10. 2. 5 正则模式下的编辑键
10. 3 终端的应用程序设计
10. 3. l 终端的打开与读写
10. 3. 2 库函数ttyname和isatty
10. 3. 3 termios结构
10. 3. 4 利用ioctl系统调用对终端进行控制
10. 3. 5 另一种对终端进行控制的方法:通过13个termios系统调用
10. 3. 6 非正则模式
10. 3. 7 终端与SIGHUP信号
10. 3. 8 终端窗口大小
10. 3. 9 ctermid
10. 3. 10 termcap. terminfo和curses
10. 3. 11 Stty命令
10. 4 程序tty_transfer的设计
10. 4. l 总体描述
10. 4. 2 头文件. 常量定义和man函数.
10. 4. 3 serial_conn函数
10. 4. 4 文件传输函数
10. 4. 5 tty_transfer的使用
10. 5 终端管理的发展
10. 5. l 数据结构的变化
10. 5. 2 流的概念的提出
10. 6 基于STREAMS的终端子系统
10. 6. l 流的概念
10. 6. 2 基于STREAMS终端的优点
10. 6. 3 线路规程模块
10. 6. 4 硬件仿真模块
10. 7 伪终端程序设计
10. 7. 1 伪终端简介
10. 7. 2 SVR4中的ptym_open和ptys_open
10. 7. 3 BSD中的ptym_open和ptys_open
10. 7. 4 pty_fork
10. 7. 5 pty编程举例
10. 7. 6 Linux下的伪终端例程
10. 7. 7 远程方式和分组方式
10. 7. 8 基于STREAMS的伪终端子系统
第十一章 socket编程
11. l 协议支持
11. 1. l 网络基础知识
11. l. 2 LinuX系统网络模块的结构
11. 1. 3 关于网络地址
11. 2 几个工具函数
11. 3 socket编程的基本流程和要用到的函数
11. 3. 1 服务器端程序的基本操作
11. 3. 2 客户端程序的基本操作
11. 4 UNIX域socket
11. 4.1 UNIX域地址
11. 4. 2 UNIX域sockst服务程序
11. 4. 3 客户程序
11. 4. 4 运行UNIX域socket示例程序
11. 4. 5 用socketpair函数建立未命名UNIX域socket
11. 4. 6 用UNIX域socket在进程间传递文件描述符
11. 5 TCP/IP网络编程
11. 5. l 关于字节序
11. 5. 2 IPv4地址
11. 5. 3 Socket编程中的IP地址结构
11. 5. 4 十进制点式IP地址与二进制IP地址间的转换
11. 5. 5 使用域名
11. 5. 6 域名解析示例
11. 5. 7 查询服务程序的端口号
11. 5. 8 TCP服务程序示例
11. 5. 9 TCP client application
11. 6 Soctet出错常量
第十二章 守护进程
12. 1 守护进程简介
12. 2 Syslogd守护进程
12. 3 Syslog函数
12. 4 daemon_init函数
12. 4. 1 fork
12. 4. 2 setsid
12. 4. 3 忽略SIGHUP并再次调用fork
12. 4. 4 改变工作目录并清除文件创建掩码
12. 4. 5 关闭所有打开的描述符
12. 4. 6 打开Syslog
12. 5 Inetd守护过程
12. 6 如何编制一个由inetd启动的服务器程序
12. 6. l 程序
12. 6. 2 配置/etc/services文件
第十三章 多线程编程
13. 1 概念
13. 1. l 什么叫线程
13. 1. 2 内核线程与用户层线程
13. 1. 3 进程. LWP和线程
13. 1. 4 线程的忧势
13. 2 多线程编程基础
13. 2. 1 概念
13. 2. 2 线程的创建和终止
13. 2. 3 线程的合并和分离
13. 2. 4 线程属性
13. 2. 5 其他
13. 3 线程之间的互斥与同步
13. 3. l 线程互斥与同步的概念
13. 3. 2 互斥锁
13. 3. 3 利用条件变量实现同步
13. 3. 4 利用互斥锁和条件变量实现同步
13. 4 线程编程中的其他问题
13. 4. 1 线程的私有变量
13. 4. 2 初始化函数
13. 4. 3 撤消其他线程的执行
13. 4. 4 清场函数
13. 4. 5 线程的信号操作
13. 4. 6 semaphore.c