UNIX高级编程

UNIX高级编程 pdf epub mobi txt 电子书 下载 2026

出版者:人民邮电出版社
作者:Warren W.Gay
出品人:
页数:591
译者:潇湘工作室
出版时间:2001-4
价格:64.00元
装帧:平装
isbn号码:9787115091505
丛书系列:计算机技术译林精选系列
图书标签:
  • Unix
  • 读过
  • 藏书
  • 编程
  • 程序设计
  • 操作系统
  • 学过
  • omg
  • UNIX
  • 编程
  • 系统编程
  • C语言
  • Linux
  • 网络编程
  • 进程间通信
  • 信号处理
  • 文件IO
  • 高级技巧
想要找书就要到 图书目录大全
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

本书详尽地介绍了UNIX系统编程的高级技术。通过本书的学习,读者将能够充分利用标准的UNIX开发工具,掌握UNIX操作系统的内部工作方式,包括文件系统的内部操作以及大量UNIX函数的正确使用方法和技巧。本书详细说明了内部处理技术、进程间控制以及通过信号、分支进程和共享内存进行同步的方法。另外,本书还提供了大量的代码实例,这些实例涉及到多用户同时访问文件的技巧、改变目录结构以及动态更改用户和组参数的方法。 本书适用于UNIX专业程序员。

作者简介

目录信息

第一部分 文件和目录
第1章 编译程序注释和选项
1.1 在线手册页
1.2 本书使用的手册索引
1.2.1 Internet上的man(1)资源
1.3 本书的实例代码
1.4 编译C程序
l.4.1 编译命令
1.5 管理编译程序警告
1.5.1 利用编译程序警告信息
1.6 编译标准
1.6.1 FreeBSD 3.4-Realease特征测试
l.6.2 HPUX 10.2特征测试
1.6.3 AIX 4.3特征测试
1.6.4 SunOS 5.6特征测试
1.6.5 特征测试总结
1.7 小结
第2章 UNIX文件系统对象
2.1 文件系统对象
2.1.1 常规文件
2.1.2 目录
2.1.3 块设备
2.1.4 字符设备
2.1.5 有名管道(FiFos)
2.1.6 套接口
2.1.7 符号链接
2.1.8 特殊文件
2.2 权限
2.2.1 常规文件的访问
2.2.2 目录的访问
2.3 使用UNIX文件
2.3.1 打开和关闭文件
2.3.2 打开特殊文件
2.3.3 使用套接口
2.3.4 复制文件描述符
2.3.5 改变标准输入
2.4 UNIX文件I/O
2.5 小结
第3章 错误处理和报告
3.1 确定是成功还是失败
3.1.1 出错指示的一般规则
3.1.2 一般规则的例外
3.1.3 成功返回值的分类
3.1.4 其他返回指示
3.2 确定失败的原因
3.3 原来的errno值
3.3.1 按名称引用错误代码
3.3.2 正确使用errno
3.4 新的errno值
3.4.1 声明新的errno值
3.4.2 使用新的errno值
3.5 报告errno值
3.5.1 使用perrno(3)值
3.5.2 使用sys_errlist[]数组
3.5.3 strerror(3)函数
3.6 使用StdiO(3)测试错误
3.6.1 函数ferror(3)的缺陷
3.6.2 避免 fclose(3)的缺陷
3.6.3 推迟错误报告
3.7 小结
第4章 UNIX输入和输出
4.1 umask(2)函数和 umask位
4.1.1 权限位
4.1.2 理解对umask的需要
4.1.3 理解umask的作用域
4.1.4 使用 umask(2)函数
4.1.5 使用umask值的例子
4.1.6 umask(2)函数
4.l.7 create(2)函数
4.2 读和写
4.2.1 read(2)和write(2)初步
4.2.2 使用 UNIX I/O
4.3 文件内查找
4.3.1 使用lseek(2)
4.4 截取文件
4.5 稀疏文件
4.5.1 创建稀疏文件
4.6 强迫把数据写到媒介上
4.6.1 sync(2)函数
4.6.2 sync(2)的缺点
4.6.3 fsync(2)函数
4.7 分散读写
4.7.1 ready(2)和 writev(2)函数
4.8 确定tty名称
4.9 小给
第5章 文件上锁
5.1 理解上锁类型
5.1.1 文件上锁技术
5.1.2 文件上锁的限制
5.1.3 在整个文件中使用劝告性上锁
5.1.4 使用flock(2)上锁
5.2 记录上锁
5.2.1 使用lockf(2)上锁
5.3 使用fcntl(2)实现POSIX上锁
5.3.1 初始化 Struct flock
5.3.2 上锁一个区域
5.3.3 解锁区域
5.3.4 获得上锁信息
5.4 强制性上锁
5.4.1 启用强制性上锁
5.5 小结
第6章 管理文件及其属性
6.1 清除文件
6.2 链接文件
6.3 移动文件
6.4 获取文件系统信息
6.4.1 函数stat(2)
6.4.2 函数 fstat(2)
6.4.3 使用文件属性
6.4.4 测试文件类型
6.4.5 修改、访问及创建时间
6.5 测试文件的访问权限
6.6 符号链接
6.6.1 函数symlink(2)
6.6.2 函数lstat(2)
6.6.3 利用readlink(2)读取符号链接的内容
6.7 文件权限和所有权
6.7.1 改变权限
6.7.2 改变所有权
6.8 有名管道(FIFO)
6.9 获得尺寸和配置信息
6.10 小结
第7章 目录管理
7.1 获得工作目录
7.1.1 指定空缓冲区参数
7.2 改变当前目录
7.2.1 保存当前目录
7.2.2 fchdir(2)的局限性
7.3 建立新目录
7.4 删除目录
7.5 打开目录进行搜索
7.6 关闭目录
7.7 搜索目录
7.8 重新回到目录的开始
7.9 保存目录中的位置
7.10 在目录内恢复位置
7.11 扫描目录
7.11.1 为scandir(3)声明自己的select函数
7.11.2 为scandir(3)声明自己的compar函数
7.11.3 sysV变体
7.11.4 scandir(3)实例
7.12 遍历目录结构
7.13 改变根目录
7.14 小结
第8章 临时目录和处理清除
8.1 创建临时文件
8.1.1 使用函数tmpnam(3)
8.1.2 使用函数mktemp(3)
8.1.3 使用函数mkstemp(3)
8.1.4 使用函数mkstemps(3)
8.1.5 使用函数tmpfile(3)
8.1.6 使用函数tempnam(3)
8.2 使文件为临时文件
8.2.1 使用unlink(2)使文件为临时文件
8.2.2 退出清除
8.2.3 使用atexit(3)函数
8.2.4 使用C+十析构函数
8.2.5 利用_exit(2)避免清除
8.3 小结
第二部分 库函数
第9章 UNIX命令行处理
9.1 命令行约定
9.1.1 使用多个选项
9.1.2 组合多个选项
9.1.3 使用带有参数的选项
9.1.4 识别选项或参数
9.2 选项参数
9.3 函数getopt(3)
9.3.1 getopt(3)外部值
9.3.2 getopt(3)函数调用
9.3.3 定义optstring参数
9.3.4 定义选项处理循环
9.4 函数getsubopt(3)
9.4.1 确定子选项处理的结束
9.4.2 getsuboPt(3)的完整例子
9.5 GNU长选项扩展
9.5.1 GNU getopt_long(3)函数
9.5.2 理解option结构
9.5.3 建立option结构
9.5.4 使用空的option.flap指针
9.5.5 使用非空option.flag指针
9.6 小给
第10章 转换函数
10.1 简单的转换函数
10.1.1 细查函数atoi(3)和atol(3)
10.1.2 atof(3)函数
10.2 使用sscanf(3)转换和验证
10.2.1 把sscanf(3)应用到数值转换
10.2.2 使用sscanf(3)测试数值转换
10.2.3 改进sscanf(3)转换
10.2.4 sscanf(3)的局限性
10.3 函数Strtol(3)和Strtoul(3)
10.3.1 使用Strtol(3)函数
10.3.2 出错测试
10.3.3 测试转换指针
10.3.4 多项转换
10.3.5 使用base参数进行基数转换
10.3.6 测试溢出和下溢
10.3.7 测试Strtoul(3)溢出
10.4 大整数转换
10.5 BSD的 Strtoq(3)和Strtouq(3)函数
1O.6 strtod(3)函数
10.6.1 使用Strtod(3)函数
10.6.2 测试算术错误
10.6.3 算术错误测试的流程
10.7 小结
第11章 UNIX日期和时间机制
11.1 时区
11.1.1 世界时间标准初步
11.2 定义日期和时间数据类型
11.3 时间转换函数
11.3.1 使用ctime(3)把时间转换为串形式
11.3.2 函数ctime_r(3)
11.3.3 函数localtime(3)和gmtime(3)
11.3.4 struct tm的成员
11.3.5 使用函数asctime(3)把日期/时间成份转换成串
11.3.6 函数tzset(3)
11.3.7 利用函数mktime(3)创建 Epoch时间
11.4 用strftime(3)定制日期和时间格式
11.4.1 strftime(3)格式说明符
11.4.2 实现DTime:strftime(3)方法
11.4.3 测试类DTime
11.4.4 理解本地设置的作用
11.5 小结
第12章 用户ID、口令和组管理
12.1 UNIX用户管理入门
12.1.1 了解用户名和用户ID号
12.1.2 了解用户名root
12.1.3 组名和组ID号
12.1.4 了解gid的0值
12.2 getuid(2)函数和geteuid(2)函数
12.3 getgid(2)函数和getegid(2)函数
12.4 真正的、有效的和已保存的用户ID
12.4.1 有效的用户ID
12.4.2 真正的用户ID
12.4.3 已保存的用户ID
12.4.4 身份验证角色概要
12.5 设置用户ID
12.6 设置组ID
12.7 FreeBSD的issetugid(2)函数
12.8 etc/passwd文件
12.8.1 注释字段
12.8.2 使用注释字段的&特征
12.9 口令数据库例程
12.9.1 passwd结构
12.9.2 getpwent(3)的错误处理
12.9.3 fgetpwent(3)函数
12.9.4 putpwent(3)函数
12.9.5 getpwuid(3)函数
12.9.6 getpwnam(3)函数
12.10 组数据库
12.10.1 /etC/group文件
12.10.2 getgrent(3)、setgrent(3)和endgrent(3)函数
12.10.3 了解group结构
12.10.4 fgetgrent(3)函数
12.10.5 getgrgid(3)函数
12.10.6 getgrnam(3)函数
12.11 相关的重人函数
12.12 辅助组
12.12.1 getgroups(2)函数
12.12.2 使用setgroups(2)函数设置组
12.12.3 为指定的用户名设置组
12.13 小结
第13章 静态库和共享库
13.1 静态库
13.1.1 检测进程内存映像
13.1.2 实现静态库
13.1.3 使用ar(l)命令创建存档文件
13.1.4 列出存档的目录
13.1.5 获得存档的详细列表
13.1.6 链接静态库
13.2 共享库
13.2.1 静态库的局限性
13.2.2 创建共享库
13.2.3 链接共享库
13.2.4 选择静态库或动态库
13.2.5 列出共享库的引用
13.2.6 动态加载程序
13.2.7 位置无关的代码
13.2.8 控制共享内容
13.3 静态库和共享库的比较
13.3.1 静态库的好处
13.3.2 共享库的优点
13.4 动态库加载
13.4.1 打开共享库
13.4.2 报告错误
13.4.3 获得共享的引用指针
13.4.4 关闭共享库
13.4.5 初始化和析构
13.4.6 应用动态加载
13.4.7 HPUX 10.2动态库加载
13.5 小结
第14章 数据库库例程
14.1 NDBM数据库
14.1.1 错误处理
14.1.2 打开NDBM数据库
14.1.3 关闭 NDBM数据库
14.1.4 存储信息
14.1.5 获取信息
14.1.6 删除信息
14.1.7 访问所有关键字
14.1.8 使用dbm_nextkey(3)函数删除关键字
14.2 NDBM数据库示例
14.2.1 目录软件
14.2.2 Dbm类
14.2.3 InoDb类
14.2.4 SnapShot应用程序
14.2.5 运行SnapShot应用程序
14.2.6 访问所有的关键字并删除
14.3 小结
第三部分 高级概念
第15章 信号
15.1 了解UNIX信号
15.2 可靠的和不可靠的信号
15.3 不可靠的signal(3) API
15.4 可靠的信号API
15.4.1 清空信号集
15.4.2 填充信号集
15.4.3 给信号集添加信号
15.4.4 从信号集中删除信号
15.4.5 测试一个集合中的信号
15.4.6 设置信号操作
15.4.7 信号操作标志
15.4.8 使用可靠的信号
15.5 控制信号
15.5.1 阻塞信号
15.5.2 获得等待状态的信号
15.5.3 sigsuspend(2)函数
15.6 应用alarm(3)函数
15.7 从信号处理程序中调用函数
15.7.1 避免重人代码的问题
15.7.2 在信号处理程序中用errno报告重入的问题
15.8 应用EINTR错误代码
15.9 唤醒信号
15.10 小结
第16章 有效的I/O调度
16.1 非阻塞的I/O
16.1.1 在非阻塞模式下打开文件
16.1.2 设置非阻塞模式
16.1.3 非阻塞的I/O操作
16.1.4 使用非阻塞I/O带来的问题
16.2 I/O调度国数
16.2.1 文件描述符集合以及它们的宏
16.2.2 timeval结构
16.2.3 select(2)函数
16.2.4 使用select(2)函数
16.3 I/O轮询
16.3.1 软询事件
16.3.2 轮询优先级
16.3.3 poll(2)示例
16.4 小结
第17章 计时器
17.1 睡眠函数
17.2 sleeP(3)的UNIX实现
17.2.1 以微秒为单位的睡眠
17.2.2 以纳秒为单位的睡眠
17.3 间隔计时器函数
17.3.1 间隔计时器API
17.3.2 间隔计时器宏
17.3.3 间隔计时器的制约
17.3.4 创建只执行一次的计时器
17.3.5 创建重复计时器
17.4 小结
第18章 管道和进程
18.1 UNIX管道
18.1.1 创建UNIX管道
18.1.2 将管道打开到其他进程
18.1.3 从管道读取数据
18.1.4 将数据写到管道
18.1.5 关闭管道
18.1.6 处理已破坏的管道
18.2 不用管道的外部进程
18.2.1 解释system(3)函数的返回值
18.2.2 调用命令
18.2.3 仔细考查system(3)函数
18.3 小结
第19章 分支进程
19.1 UNIX分支进程概述
19.1.1 fork(2)函数
19.1.2 使用fork(2)
19.2 等待进程完成
19.2.1 僵进程
19.2.2 wait(2)函数
19.2.3 解释退出状态
19.2.4 其他等待系统调用
19.3 执行新程序
19.4 exec(2)系列的其他成员
19.5 小给
第20章 模式匹配
20.1 shell模式
20.1.1 *元字符
20.1.2 ?元字符
20.1.3 [元字符和]元字符
20.1.4 !元字符
20.1.5 带有\的转义字符
20.2 字符串模式函数
20.3 glob(3)函数
20.3.1 glob(3)函数的返回值
20.4 小结
第21章 正则表达式
21.1 了解正则表达式
21.1.1 固定符
21.1.2 集合
21.1.3 范围
21.1.4 字符类
21.1.5 无字符
21.1.6 加上括号的匹配子表达式
21.1.7 原子
21.1.8 段
21.1.9 分支
21.1.10 表达式边界
21.1.11 引用的字符
21.2 正则表达式库
21.2.1 编译正则表达式
21.2.2 报告错误
21.2.3 释放正则表达式
21.2.4 匹配正则表达式
21.2.5 应用正则表达式
21.3 小结
第22章 进程间的通信
22.1 IPC的类型
22.2 消息队列
22.3 共享内存
22.4 信号量
22.5 引用IPC资源
22.5.1 IPC关键字值
22.5.2 创建IPC资源
22.5.3 根据IPC关键字访问
22.5.4 根据 IPC ID访问
22.6 撤销IPC资源
22.7 小结
第23章 消息队列
23.1 控制消息队列
23.1.1 创建消息队列
23.1.2 访问消息队列
23.1.3 撤销消息队列
23.1.4 获得消息队列的信息
23.1.5 改变消息队列
23.2 发送消息和接收消息
23.2.1 发送消息
23.2.2 接收消息
23.3 使用消息队列
23.4 小给
第24章 信号量
24.1 信号量实用程序
24.2 创建和访问信号量集合
24.3 撤销信号量集合
24.4 控制信号量
24.4.1查询信号量集合
24.4.2 更改信号量访问
24.4.3 查询信号量的值
24.4.4 查询整个信号量集合的值
24.4.5 更改信号量的值
24.4.6 更改整个信号量集合的值
24.4.7 查询信号量的进程ID
24.4.8 查询等待通知的进程数
24.4.9 查询等待0的进程数
24.5 使用信号量
24.5.1 等待信号量
24.5.2 通知信号量
24.5.3 等待0操作
24.5.4 信号量取消处理
24.5.5 semop实用程序
24.6 小结
第25章 共享内存
25.1 globvar实用程序
25.1.1 创建全局变量池
25.1.2 撤销全局变量池
25.1.3 globvar环境变量
25.1.4 创建全局变量
25.1.5 访问全局变量
25.1.6 删除全局变量
25.1.7 清除全局变量池
25.2 共享内存系统调用
25.2.1 创建和访问共享内存
25.2.2 获取共享内存的信息
25.2.3 更改共享内存属性
25.2.4 连接共享内存
25.2.5 释放共享内存
25.2.6 撤销共享内存
25.3 使用共享内存
25.4 小给
第26章 内存映射的文件
26.1 确定页面的大小
26.2 创建内存的映射
26.3 控制内存映射的区域
26.3.1 更改访问保护
26.3.2 通知核心内存的使用情况
26.3.3 查询内存中的页面
26.3.4 同步更改
26.4 撤销内存映射
26.5 小结
第27章 X Window编程
27.1 事件驱动的编程
27.1.1 事件驱动的模型
27.1.2 客户/服务器处理
27.1.3 软件层次
27.2 Xlib客户程序
27.3 小结
· · · · · · (收起)

读后感

评分

评分

评分

评分

评分

用户评价

评分

阅读体验上,这本书给我的感觉更像是一本“工具箱与使用说明书的合集”,而非传统意义上的故事性读物。它的结构安排非常合理,从基础的进程/线程模型开始,逐步深入到网络套接字编程,最后收尾于系统性能调优的初步探讨。让我印象深刻的是它对网络编程部分的处理。它不仅仅停留在 TCP/IP 协议栈的表面,而是深入探讨了 socket 选项的各种设置及其对性能和行为的影响,比如 `SO_RCVBUF` 和 `SO_SNDBUF` 的真正含义,以及如何使用 `setsockopt()` 来精细控制连接的行为。书中对阻塞与非阻塞 I/O 的描述,尤其是结合 `select`/`poll`/`epoll` 模型的对比,清晰地勾勒出了不同并发模型的工作原理和适用场景。我发现书中对每一个系统调用的返回值、错误码(errno)的处理都进行了详尽的解释,这对于调试那些在不同系统环境下表现不一致的程序至关重要。这本书强迫你停止依赖高级封装库,转而直面操作系统的“原始能力”,这对于系统底层架构师的培养至关重要。

评分

我很少在技术书籍中看到如此清晰的“设计哲学”阐述。这本书不仅仅是技术手册,它更像是在传授一种看待系统问题的方式。作者反复强调模块化、清晰的接口分离以及最小权限原则在系统设计中的重要性。在讨论到管道(pipe)和消息队列(message queue)时,它不只是讲解了如何使用它们来传递数据,更是深入剖析了它们在数据流控制和系统解耦方面的设计意图。尤其让我眼前一亮的是关于终端 I/O 控制(termios)那一部分,这通常是系统编程中被严重低估的领域。书中详细解释了如何设置终端的行规约模式(canonical mode)和非规范模式,这对于开发交互式命令行工具至关重要。通过这些细节的描述,我深刻理解了为什么 UNIX 上的工具链能够如此强大和灵活——因为它们严格遵守了“一切皆文件”和清晰的数据流抽象。这本书成功地将晦涩的系统调用知识,转化成了一套清晰、可操作的系统设计原则,强烈推荐给所有想成为系统软件专家的同行。

评分

这本书的深度令人望而生畏,但一旦你跨过了最初的陡峭学习曲线,你会发现它提供了无与伦比的洞察力。它有一部分内容专门讲授了高级文件 I/O 操作,比如内存映射文件(mmap)与标准 I/O(stdio)库之间的性能差异和底层原理。作者非常巧妙地将理论与实际的性能测试结果结合起来,而不是空泛地宣称“mmap 更快”。通过对系统调用次数和上下文切换的分析,它揭示了为什么在处理超大文件时,内存映射能有效减少内核态与用户态之间的数据拷贝。此外,对于多线程编程中常常出现的竞态条件问题,这本书提供了一套系统的排查和预防方法论,远超出了教科书上简单的互斥锁示例。它教会我如何使用更底层的同步机制,以及何时应当优先考虑原子操作而非重量级的锁。我感觉这本书仿佛是某种武学秘籍,需要反复研读和实践才能领悟其精髓,但一旦掌握,就能脱胎换骨,写出真正高效、可预测的程序。

评分

这本书的叙述风格非常冷静且极其严谨,像一位经验丰富的老工程师在给你做一对一的辅导,没有丝毫多余的煽情或夸张的修辞,全是干货。我尤其欣赏它对“可靠性”和“健壮性”的强调,很多章节都在讨论如何编写能抵抗异常情况(比如资源耗尽、信号中断)的程序。它没有沉溺于最新的花哨技术,而是扎扎实实地构建在经典 UNIX 哲学之上。我记得有一节专门讨论了守护进程(Daemon)的正确创建和管理,详细列出了所有需要清理和重定向的文件描述符,以及如何正确地处理父子进程关系,避免僵尸进程的产生。这在很多入门或中级教程中往往是一笔带过的地方,但在这本书里却被提升到了一个核心地位。对于那些经常需要部署生产环境服务的开发者来说,书中关于日志记录、错误处理和资源释放的范例,简直就是最佳实践手册。我尝试根据书中的建议重构了我之前的一个网络服务模块,结果发现代码的稳定性和错误恢复能力有了显著的提升。这本书的价值不在于让你快速学会一门新语言,而在于教你如何用最基本、最底层的工具,构建出永不崩溃的软件基石。

评分

这本书简直是为那些渴望深入理解操作系统内核的硬核程序员准备的宝典。我最初以为它会像市面上许多同类书籍那样,泛泛而谈地介绍一些基础的系统调用,但实际阅读后才发现,它完全是另一个层级的存在。作者对内存管理、进程间通信(IPC)机制的剖析细致入微,几乎是手把手地带你走进 Linux/POSIX 环境下的底层逻辑。特别是关于信号处理和线程同步那几章,不再是简单的 API 罗列,而是深入探讨了不同同步原语背后的调度策略和性能权衡。我特别喜欢它对传统 I/O 模型(如阻塞、非阻塞、异步 I/O)的对比分析,不仅给出了代码示例,更重要的是解释了为什么在特定场景下,一种模型会比另一种更优越。书中那些关于文件系统 VFS 层的深入讲解,让我对 `open()`、`read()` 这些看似简单的函数调用背后所涉及的复杂数据结构和内核路径有了全新的认识。读完后,我感觉自己对编写健壮、高性能的系统级应用的信心倍增,不再是那个只会依赖上层框架的“调包侠”了。这本书要求读者有一定的 C 语言基础和对计算机体系结构的基本了解,但对于想要从“会用”进阶到“精通”的资深开发者来说,绝对是不可或缺的参考书。

评分

介绍unix编程的概念,命令和实践方法。 只在linux,solaris和BSD下实践过。是学linux和unix编程的好书。

评分

介绍unix编程的概念,命令和实践方法。 只在linux,solaris和BSD下实践过。是学linux和unix编程的好书。

评分

介绍unix编程的概念,命令和实践方法。 只在linux,solaris和BSD下实践过。是学linux和unix编程的好书。

评分

介绍unix编程的概念,命令和实践方法。 只在linux,solaris和BSD下实践过。是学linux和unix编程的好书。

评分

介绍unix编程的概念,命令和实践方法。 只在linux,solaris和BSD下实践过。是学linux和unix编程的好书。

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 book.wenda123.org All Rights Reserved. 图书目录大全 版权所有