图书介绍

Linux编程24学时教程【2025|PDF下载-Epub版本|mobi电子书|kindle百度云盘下载】

Linux编程24学时教程
  • (美)(W.W.盖伊)Warren W.Gay著;潇湘工作室译 著
  • 出版社: 北京:机械工业出版社
  • ISBN:7111080114
  • 出版时间:2000
  • 标注页数:350页
  • 文件大小:14MB
  • 文件页数:354页
  • 主题词:

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

Linux编程24学时教程PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1学时 入门1

1.1 Linux简介1

1.2 GNU gcc简介1

1.2.1 选择GNU标准1

1.2.2 指定编译器输出2

1.2.3 运行编译后的程序2

1.3 用于调试的编译2

1.4 检查编译器的警告级别4

1.5 处理编译器的警告消息5

1.5.1 关于赋值的警告5

1.5.2 关于未用参数的警告7

1.5.3 解决关于未用变量的警告7

1.5.4 解决关于未用字符串的警告9

1.6 测试C编译器10

1.7 课时小结12

1.8 专家答疑12

1.9 课外作业12

1.9.1 思考题12

1.9.2 练习题12

第2学时 管理源代码13

2.1 使用源代码管理的好处13

2.2 有哪些可以选择的工具13

2.3 为项目设置RCS13

2.4 创建新的源文件14

2.5 查看RCS控制的文件16

2.6 使用RCS子目录16

2.7 签出文件进行编辑17

2.8 修改文件18

2.9 显示修改的内容19

2.10 注册修改19

2.11 用rlog命令列出编辑历史记录20

2.12 嵌入式替换20

2.13 显示嵌入的RCS信息22

2.14 使用源文件模板23

2.14.1 源代码模板23

2.14.2 包含文件模板23

2.15 取消锁定的签出24

2.16 课时小结24

2.17 专家答疑24

2.18 课外作业25

2.18.1 思考题25

2.18.2 练习题25

第3学时 编写Linux实用程序26

3.1 开始使用项目dos_cvrt26

3.1.1 项目规划26

3.1.2 签出dos_cvrt.c进行编辑26

3.1.3 选择包含文件27

3.1.5 测试带占位程序的实用程序29

3.1.6 替换占位程序29

3.1.7 回顾整个项目33

3.2 使用命令行编辑34

3.2.1 选择命令行编辑模式35

3.2.2 进行命令行搜索35

3.3 课时小结37

3.4 专家答疑37

3.5 课外作业37

3.5.1 思考题37

3.5.2 练习题38

第4学时 C语言的模块化编辑39

4.1 模块化编辑39

4.2 制作模块化的dos_cvrt.c39

4.2.1 签出dos_cvrt.c进行编辑39

4.2.2 将dos_cvrt.c分解为函数39

4.2.3 改善dos_cvrt42

4.2.4 将dos_cvrt分解独立的源程序模块44

4.2.5 声明静态函数49

4.3 课时小结50

4.4 专家答疑50

4.5 课外作业50

4.5.1 思考题50

4.5.2 练习题50

第5学时 Make文件简介51

5.1 为什么要使用make?51

5.2 Makefile文件51

5.2.1 测试make的内部功能51

5.2.2 命名自己的Makefile文件52

5.2.3 Makefile的目标文件52

5.2.4 默认的目标文件53

5.2.5 标准目标文件名称54

5.2.6 依赖关系54

5.3 定义make的宏55

5.3.1 替代宏的值56

5.3.2 使用环境变量56

5.3.3 使用make的-e选项57

5.4 检查文件的后缀58

5.5 推理规则58

5.5.1 测试默认推理规则58

5.5.2 定义推理规则59

5.5.3 动作语句59

5.5.4 内部宏59

5.5.5 宏CFLAGS60

5.6 为dos_cvrt使用Makefile文件60

5.6.1 生成一个Makefile文件61

5.6.2 测试新的Makefile文件62

5.6.3 测试局部编译62

5.7 课时小结63

5.8 专家答疑63

5.9 课外作业63

5.9.1 思考题63

5.9.2 练习题63

第6学时 Linux命令行选项处理65

6.1 命令行处理简介65

6.1.1 命令行约定65

6.1.2 使用多个选项65

6.1.3 组合多个选项65

6.1.4 使用带参数的选项65

6.1.5 区分选项和参数66

6.2 检查看起来像选项的参数66

6.3 getopt()简介66

6.4 getopt()函数调用67

6.5 回顾函数getopt()的原型67

6.5.1 定义optstring参数68

6.5.2 定义一个选项处理循环68

6.6 使用getopt()改进dos_cvrt69

6.7 GNU长选项扩展72

6.8 使用GNU函数getopt_long()73

6.8.1 定义GNU函数getopt_long()的原型73

6.8.2 理解option结构73

6.8.3 设置option结构73

6.8.4 使用一个空option.flag指针74

6.8.5 使用一个非空option.flag指针74

6.9 为dos_cvrt增加GNU长选项75

6.10 课时小结79

6.11 专家答疑79

6.12 课外作业79

6.12.1 思考题79

6.12.2 练习题79

第7学时 错误的处理和报告81

7.1 如何处理错误81

7.2 UNIX的错误报告81

7.2.1 指出成功或错误81

7.2.2 判断错误的原因81

7.3 旧的errno值82

7.3.1 通过名称引用错误代码82

7.3.2 测试特殊错误82

7.3.3 正确使用errno83

7.4 新的errno值83

7.4.1 声明新的errno变量83

7.4.2 使用新的errno变量84

7.5 关于errno值的输出84

7.5.1 使用函数perror()84

7.5.2 使用数组sys_errlist[]85

7.5.3 使用函数strerror()86

7.6 改进dos_cvrt使它友好地报告错误87

7.6.1 改进模块unix2dos.c87

7.6.2 改进模块dos2unix.c89

7.6.3 生成模块putch.c91

7.6.4 改变包含文件dos_cvrt.h92

7.6.5 改进Makefile92

7.6.6 改进模块dos_cvrt.c93

7.7 测试所有的错误96

7.8 课时小结96

7.9 专家答疑96

7.10 课外作业97

7.10.1 思考题97

7.10.2 练习题97

第8学时 Linux的main程序及其环境98

8.1 main程序接口98

8.1.1 组织数组argv[]98

8.1.2 使用不带argc的argv[]99

8.1.3 声明第三个main()参数99

8.1.4 传递外壳的外部变量99

8.1.5 使用外部指针environ100

8.2 Linux程序的地址空间100

8.3 环境操作107

8.3.1 获取一个环境变量107

8.3.2 改变环境变量107

8.3.3 删除环境变量的定义108

8.3.4 理解环境变化的影响108

8.4 进程出口值110

8.4.1 退出代码处理110

8.4.2 返回一个值110

8.4.3 使用exit()函数111

8.4.4 在return和exit()之间选择111

8.4.5 使用关于return语句的编译器警告111

8.5 课时小结112

8.6 专家答疑112

8.7 课外作业112

8.7.1 思考题112

8.7.2 练习题112

第9学时 有用的调试技术113

9.1 调试技术简介113

9.2 调试器的限制113

9.3 用C宏进行跟踪113

9.3.1 定义一个TRACE宏113

9.3.2 改进TRACE宏115

9.3.3 定义一个参数数量可变的TRACEF115

9.3.4 定义有条件的调试宏116

9.4 运行阶段调试跟踪功能116

9.4.1 用命令行选项控制TRACE116

9.4.2 使用调试级别117

9.4.3 通过环境变量来设置调试级别117

9.5 设计子系统跟踪功能118

9.5.1 编写子系统跟踪功能118

9.5.2 子系统跟踪总结121

9.6 课时小结122

9.7 专家答疑122

9.8 课外作业122

9.8.1 思考题122

9.8.2 练习题122

第10学时 静态和共享函数库124

10.1 C函数库简介124

10.2 静态函数库124

10.2.1 回顾进程内存映像124

10.2.2 实现一个静态函数库125

10.2.3 使用ar命令来生成档案125

10.2.4 列出档案的内容126

10.2.5 链接静态函数库126

10.3 共享函数库127

10.3.1 静态函数库的限制127

10.3.2 生成一个共享函数库128

10.3.3 链接共享函数库128

10.3.4 列出共享函数库的引用129

10.3.5 使用动态装载器129

10.3.6 独立于代码的编译位置131

10.3.7 控制共享的内容132

10.4 函数库的含义132

10.4.1 静态函数库的优点132

10.4.2 共享函数的优点133

10.5 何时该使用静态或共享函数库134

10.5.1 许可证号134

10.5.2 安装可靠134

10.5.3 为了节省而共享134

10.5.4 动态装载134

10.6 课时小结134

10.7 专家答疑135

10.8 课外作业135

10.8.1 思考题135

10.8.2 练习题135

第11学时 高级字符串函数137

11.1 高级字符串函数简介137

11.2 包含字符串函数声明137

11.3 函数strcasecmp()和strncasecmp()137

11.3.1 测试一个命令名称匹配的例子137

11.3.2 比较前n个字符137

11.3.3 解释返回值138

11.4 函数strdup()138

11.4.1 释放字符串138

11.4.2 测试错误138

11.5 函数strchr()和strrchr()139

11.6 函数strpbrk()139

11.7 函数strspn()和strcspn()140

11.8 函数strstr()141

11.9 函数strtok()和strtok_r()141

11.9.1 函数strtok()141

11.9.2 分解一个命令行141

11.9.3 函数strtok_r()143

11.9.4 strtok()的限制143

11.9.5 保存状态144

11.9.6 介绍strtok_r()函数144

11.10 字符串使用技巧145

11.10.1 优化strcat()和strcpy()调用146

11.10.2 有效地使用strncpy()返回值146

11.10.3 临时编写sprintfcat()函数146

11.11 课时小结147

11.12 专家答疑147

11.13 课外作业147

11.13.1 思考题148

11.13.2 练习题148

第12学时 转换函数149

12.1 转换函数简介149

12.2 系列函数atoi()、atol()和atof()149

12.2.1 详细考察函数atoi()和atol()150

12.2.2 使用atof()函数151

12.3 为转换和有效性使用sscanf()151

12.3.1 将sscanf()用于数字转换151

12.3.2 测试使用sscanf()的数值转换153

12.3.3 改善sscanf()转换153

12.3.4 考虑sscanf()的限制153

12.4 函数strtol()和strtoul()154

12.4.1 使用函数strtol()154

12.4.2 测试函数strtol()155

12.4.3 测试错误155

12.4.4 测试转换指针155

12.4.5 执行多个转换155

12.4.6 理解基数转换156

12.4.7 测试上溢和下溢158

12.4.8 对strtoul()上溢的测试160

12.5 函数strtod()160

12.5.1 使用函数strtod()160

12.5.2 测试数学错误161

12.6 课时小结162

12.7 专家答疑162

12.8 课外作业163

12.8.1 思考题163

12.8.2 练习题163

第13学时 Linux的日期和时间功能164

13.1 日期和时间支持功能简介164

13.2 Epoch时间简介164

13.3 理解当前的Linux日期和时间165

13.3.1 定义日期和时间数据类型166

13.3.2 理解为什么时间在运行166

13.3.3 发现time_t数据类型166

13.3.4 使用time()获得日期和时间167

13.4 使用时间转换函数167

13.4.1 函数ctime()167

13.4.2 函数localtime()和gmtime()168

13.4.3 tm结构168

13.4.4 函数asctime()170

13.4.5 函数tzset()170

13.4.6 函数mktime()171

13.5 定制日期和时间格式173

13.6 课时小结176

13.7 专家答疑177

13.8 课外作业177

13.8.1 思考题177

13.8.2 练习题177

第14学时 用户ID、密码和组管理179

14.1 简单介绍Linux的管理179

14.1.1 用户名和uid编号179

14.1.2 组名和gid编号180

14.2 身份函数180

14.2.1 getuid()和geteuid()函数180

14.2.2 getgid()和getegid()函数180

14.2.3 uid和gid编号示例181

14.3 /etc/passwd文件181

14.3.1 注释域182

14.3.2 在注释域中使用&182

14.3.3 搜索密码数据库182

14.4 密码数据库例程183

14.4.1 passwd结构183

14.4.2 处理getpwent()函数的错误184

14.4.3 fgetpwent()函数184

14.4.4 putpwent()函数185

14.4.5 getpwuid()函数185

14.4.6 getpwnam()函数185

14.5 组数据库186

14.5.1 /etc/group文件186

14.5.2 getgrent()、setgrent()和endgrent()函数187

14.5.3 group结构187

14.5.4 fgetgrent()函数188

14.5.5 getgrgid()函数188

14.5.6 getgrnam()函数188

14.6 课时小结189

14.7 专家答疑189

14.8 课外作业189

14.8.1 思考题189

14.8.2 练习题189

第15学时 文件系统信息和管理191

15.1 基本的文件操作191

15.1.1 删除文件191

15.1.2 链接文件191

15.1.3 移动文件192

15.2 目录操作192

15.2.1 得到当前的工作目录193

15.2.2 改变目录194

15.2.3 创建新目录194

15.2.4 删除目录196

15.3 设置umask值197

15.3.1 为什么要用umask197

15.3.2 umask的作用范围197

15.3.3 使用umask()函数198

15.4 理解文件系统信息199

15.5 课时小结203

15.6 专家答疑203

15.7 课外作业203

15.7.1 思考题203

15.7.2 练习题204

第16学时 临时文件和进程清理205

16.1 生成临时文件名205

16.1.1 调用tmpnam()函数205

16.1.2 调用mkstemp()函数207

16.1.3 调用tmpfile()函数209

16.1.4 调用tempnam()函数210

16.1.5 解释临时文件函数的错误212

16.2 将文件设为临时文件213

16.2.1 调用unlink()函数将文件设为临时文件213

16.2.2 退出之前的清理213

16.3 课时小结215

16.4 专家答疑215

16.5 课外作业216

16.5.1 思考题216

16.5.2 练习题216

第17学时 管道和进程217

17.1 使用外部进程217

17.2 管道简介217

17.2.1 打开管道217

17.2.2 读管道218

17.2.3 写管道220

17.2.4 关闭管道222

17.2.5 处理断开的管道223

17.3 system()函数简介223

17.3.1 system()函数的返回值224

17.3.2 调用system()函数224

17.3.3 运行程序示例225

17.3.4 对system()函数的评价227

17.4 课时小结227

17.5 专家答疑227

17.6 课外作业227

17.6.1 思考题227

17.6.2 练习题228

第18学时 派生进程229

18.1 进程简介229

18.1.1 进程ID号229

18.1.2 父进程和子进程229

18.1.3 创建进程229

18.2 fork()函数230

18.2.1 调用fork()函数230

18.2.2 运行fork()函数示例232

18.3 wait()函数族233

18.3.1 wait()函数的重要性233

18.3.2 调用wait()函数234

18.3.3 wait函数族中的其他函数237

18.4 exec()函数族237

18.4.1 exec()过程237

18.4.2 联合fork()函数和exec()函数237

18.4.3 调用exec()函数238

18.4.4 exec()函数族中的其他函数241

18.5 课时小结242

18.6 专家答疑242

18.7 课外作业242

18.7.1 思考题242

18.7.2 练习题243

第19学时 信号量244

19.1 信号量简介244

19.1.1 和单淋浴间的类比244

19.1.2 和多淋浴间的类比245

19.1.3 使用Linux信号量245

19.1.4 等待信号量245

19.1.5 通知信号量245

19.1.6 等待多个实例246

19.2 创建和访问信号量集246

19.2.1 标识已存在的信号量集246

19.2.2 调用semget()函数来创建和访问信号量集246

19.2.3 初始化信号量集248

19.3 等待和通知信号量集249

19.3.1 等待信号量集250

19.3.2 通知信号量集251

19.4 释放信号量占用的系统资源251

19.4.1 删除信号量集251

19.4.2 使用ipcrm命令释放信号量252

19.5 模拟使用信号量253

19.6 课时小结260

19.7 专家答疑260

19.8 课外作业261

19.8.1 思考题261

19.8.2 练习题261

第20学时 共享内存262

20.1 为什么需要共享内存262

20.2 标识共享内存262

20.3 创建、连接和释放共享内存262

20.3.1 创建新的共享内存262

20.3.2 连接共享内存263

20.3.3 在指定的地址连接265

20.3.4 分离共享内存266

20.3.5 释放共享内存266

20.4 使用共享内存267

20.4.1 安全访问共享内存267

20.4.2 直接引用共享内存而不用信号量267

20.5 将共享内存应用到一个游戏中268

20.5.1 回顾战般游戏268

20.5.2 玩家指令269

20.5.3 分析玩家1的代码271

20.5.4 分析玩家2的代码275

20.5.5 查看其他重要的源模块275

20.6 课时小结279

20.7 专家答疑279

20.8 课外作业279

20.8.1 思考题279

20.8.2 练习题280

第21学时 消息队列281

21.1 消息队列简介281

21.1.1 Linux消息队列281

21.1.2 应用消息类型281

21.1.3 相互竞争的接收者282

21.2 管理消息队列283

21.2.1 创建和访问消息队列283

21.2.2 释放消息队列284

21.2.3 消息的结构285

21.2.4 指定消息的大小285

21.2.5 发送消息286

21.2.6 接收消息287

21.3 呼叫服务器289

21.4 课时小结296

21.5 专家答疑296

21.6 课外作业296

21.6.1 思考题297

21.6.2 练习题297

第22学时 信号298

22.1 什么是信号298

22.2 信号SIGINT298

22.3 信号的术语299

22.4 可靠的和不可靠的信号299

22.5 使用信号集299

22.5.1 清空信号集299

22.5.2 填充信号集300

22.5.3 向信号集中添加信号300

22.5.4 从信号集中删除信号301

22.5.5 测试信号集中的信号301

22.6 设置信号响应301

22.7 捕获信号303

22.8 封锁和解锁信号305

22.9 得到挂起的信号306

22.10 调用sigsuspend()函数306

22.11 调用alarm()函数307

22.12 高级信号技术309

22.12.1 从信号处理程序中调用函数309

22.12.2 避免可重入代码问题310

22.12.3 在信号处理程序中处理errno311

22.12.4 处理EINTR错误311

22.13 常用的Linux信号312

22.14 引发Linux信号313

22.15 课时小结313

22.16 专家答疑313

22.17 课外作业314

22.17.1 思考题314

22.17.2 练习题314

第23学时 客户/服务器编程315

23.1 客户/服务器的优点315

23.2 设计TQL服务器315

23.2.1 编译TQL项目316

23.2.2 使用TQL命令行选项316

23.2.3 检查TQL的环境变量317

23.3 理解SQL317

23.3.1 使用SELECT命令318

23.3.2 使用表和列318

23.3.3 第一次启动TQL318

23.3.4 选择特定的列319

23.3.5 选择特定的行320

23.3.6 对行进行排序320

23.4 分析TQL的源代码321

23.4.1 分析表代码322

23.4.2 在tqld中处理信号322

23.4.3 分析排序模块323

23.4.4 执行sort命令327

23.5 课时小结329

23.6 专家答疑329

23.7 课外作业330

23.7.1 思考题330

23.7.2 练习题330

第24学时 使用帮助页331

24.1 介绍man命令331

24.1.1 使用man命令331

24.1.2 探索节的内容331

24.1.3 找到帮助页332

24.1.4 调试帮助页332

24.1.5 解决与文档的冲突335

24.1.6 查看ERRORS部分337

24.1.7 查看SEE ALSO部分338

24.1.8 查找文件339

24.1.9 有文档记录的错误339

24.2 课时小结339

24.3 展望未来339

24.4 专家答疑340

24.5 课外作业341

24.5.1 思考题341

24.5.2 练习题341

附录 思考题答案342

热门推荐