《Unix系统Ⅴ第4版 程序员指南 ANSI C和编程支持工具 programmer's guide ANSIC C and programming support tools》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:贾耀良
  • 出 版 社:北京:电子工业出版社
  • 出版年份:1992
  • ISBN:750531551X
  • 页数:505 页
图书介绍:

第一章 概述 1

1·2 C编译 1

目录 1

目的 1

1·1 引言 1

1·3 C语言 2

1·3·3 C程序怎样与shell通信 3

记法约定 3

1·3·2 库和前导文件 3

1·3·1 用C进行模块化程序设计 3

1·4 内容提要 4

1·4·2 程序分析 5

1·4·1 创建可执行程序 5

1·4·4 程序开发 6

1·4·3 程序管理 6

1·5 其它工具 7

1·4·5 高级编程公用程序 7

2·2 编译和连接 9

2·1 引言 9

第二章 C编译系统 9

图 11

图2-1 C编译系统的组织 11

2·2·1 基本的cc命令行语法 11

2·2·2 常用的cc命令行任选项 15

2·2·2·1 搜索前导文件 15

2·2·2·2 为符号排错准备程序 16

2·2·2·3 为梗概准备程序 16

2·2·2·4 优化用户程序 16

2·2·3 连接编辑 16

2·2·3·1 默认的安排 17

2·2·3·2 连接标准库 17

2·2·3·3 创建并连接档案库及共享目标库 19

2·2·3·4 规定由连接编辑程序搜索的目录 21

2·2·3·5 规定动态连接程序搜索的目录 23

2·2·3·6 核实运行时的兼容性 25

2·2·3·7 动态连接编程接口 25

2·2·3·8 实现 25

2·2·3·9 建立共享目标的准则 27

2·2·3·10 重复定义的符号 31

2·2·3·11 快速参考指南 32

2·3 库和前导文件 34

2·3·1 前导文件 34

2·3·2 怎样使用库函数 35

图2-2 string(3S)手册页摘要 36

2·3·3 C库(libc) 37

图2-3 怎样在程序中使用strcmp() 37

2·3·3·2 3C子节中的例程 38

图2-4 标准I/O函数和宏 38

2·3·3·1 3S子节中的例程 38

图2-5 字符串操作 39

图2-6 对8位字符编码的整数值分类 40

2·3·4 数学库(libm) 41

图2-7 字符、整数或字符串的转换 41

2·3·3·3 系统调用 41

图2-8 数学函数 42

2·3·5 通用库(libgen) 44

图2-9 libgen函数 44

2·3·6·1 用户始终拥有的三个文件 45

2·3·6 标准I/O 45

2·3·6·2 命名的文件 46

2·3·6·3 传递命令行实参 47

图2-10 使用argv[1]传递文件名 48

图2-11 使用命令行实参设置标志 49

第三章 C语言 51

3·1·1·1 全局行为 51

3·1 引言 51

3·1·1 编译方式 51

3·1·2 怎样使用本章 52

3·1·3 翻译的阶段 52

3·2·2 标识符 53

3·2·1 单词 53

3·2 源码文件和单词切分 53

3·2·3 关键字 53

3·2·4·1 整数常量 54

3·2·4·2 浮点数常量 54

3·2·4 常量 54

3·2·4·3 字符常量 54

3·2·4·4 宽字符和多字节字符 55

3·2·7 注释 56

3·2·5 字符串字面量 56

3·2·6 宽字符串字面量 56

3·3 预处理 56

3·3·1 三元组序列 56

3·3·2·1 预处理数 57

3·3·3 预处理指令 57

3·3·3·1 预处理操作符 57

3·3·2 预处理单词 57

3·3·3·2 宏定义和扩展 58

3·3·3·4 条件编译 59

3·3·3·3 文件蕴含 59

3·3·3·5 行控制 60

3·3·3·6 断言 61

3·3·3·7 版本控制 62

3·3·3·8 pragmas 62

3·4·2·1 基本类型 63

3·3·3·9 出错信息生成 63

3·3·3·10 预定义的名字 63

3·4 声明和定义 63

3·4·2 类型 63

3·4·1 引言 63

3·4·2·3 结构和联合 64

3·4·2·2 类型限定符 64

3·4·2·4 枚举类型 66

3·4·3 作用域 66

3·4·4 存储保留期 66

3·4·5 存储类区分符 67

3·4·6 声明符 67

3·4·6·1 指针声明符 68

3·4·6·2 数组声明符 69

3·4·6·3 函数声明符 69

3·4·7 函数定义 70

3·5·1·4 浮点数和双精度数 71

3·5 转换和表达式 71

3·5·1·1 字符和整数 71

3·5·1·2 有符号和无符号整数 71

3·5·1·3 整型和浮点型 71

3·5·1 隐式转换 71

3·5·1·5 普通算术转换 72

3·5·2 表达式 72

3·5·2·1 对象和左值 72

3·5·3·1 单目操作符 73

3·5·2·2 初等表达式 73

3·5·3 操作符 73

3·5·3·2 强制操作符——显式转换 74

3·5·3·3 乘法类操作符 74

3·5·3·4 加法类操作符 75

3·5·3·7 相等操作符 76

3·5·3·8 按位与操作符 76

3·5·3·5 移位操作符 76

3·5·3·6 关系操作符 76

3·5·3·10 按位或操作符 77

3·5·3·9 按位异或操作符 77

3·5·3·11 逻辑与操作符 77

3·5·3·12 逻辑或操作符 77

3·5·3·13 条件运算符 78

3·5·3·14 赋值表达式 78

3·5·3·16 结构操作符 79

3·5·4 操作符的结合性和优先级 79

3·5·3·15 逗号操作符 79

3·5·5 常量表达式 79

3·5·6 初始化 80

3·6 语句 82

3·6·1 表达式语句 82

3·6·2 复合语句 82

3·6·3·3 switch 83

3·6·3·1 if 83

3·6·3·2 else 83

3·6·3 选择语句 83

3·6·4 迭代语句 84

3·6·4·1 while 84

3·6·4·2 do-while 84

3·6·5 转移语句 85

3·6·5·1 goto 85

3·6·5·2 break 85

3·6·4·3 for 85

3·6·5·3 continue 86

3·6·5·4 return 86

3·7 可移植性的考虑 86

4·1 引言 89

4·1·1 消息类型和可用任选项 89

第四章 C编译程序的诊断 89

4·2 消息 90

4·1·2 消息中的操作符名 90

4·3 操作符名 186

4·4 其它出错消息 187

5·1 引言 189

5·1·1 任选项和指令 189

5·1·2 lint和编译程序 189

第五章 lint 189

5·1·3 消息格式 190

5·2 lint做什么 190

5·2·1 一致性检查 190

5·2·2 检查可移植性 191

5·2·3 可疑的结构 193

5·3 使用 194

5·3·1 lint库 195

5·3·2 lint过滤程序 196

5·3·3 任选项和指令列表 196

5·4 针对lint的消息 199

6·1 引言 229

第六章 sdb 229

6·2 命令行语法 230

6·3 交互式命令 231

6·3·1 显示栈轨迹 232

6·3·2 检查变量 232

6·3·3 文件的显示和操纵 236

6·3·4 活进程的排错 237

6·3·5 机器语言级排错 240

6·3·6 退出 241

6·4 例子 241

图6-1 源程序c_recurse·c 242

图6-2 sdb用法例子 243

第七章 lprof 245

7·1 C梗概工具的概述 245

7·1·1 怎样使用梗概处理程序 246

7·2 编译你的程序 246

7·3 运行梗概处理过的程序 247

7·3·1 RPOFOPTS环境变量 247

7·3·2 使用PROFOPTS的例子 248

7·3·2·1 关闭梗概处理 248

7·3·2·2 合并数据文件 249

7·3·2·3 在另一目录中保留数据文件 249

7·3·2·4 对shell命令文件进行梗概处理 249

7·4 调用lprof 250

7·3·2·5 对调用Fork的程序进行梗概处理 250

7·4·1 寻找源文件 252

7·4·2 源列表输出 252

7·4·3 突出未执行的行 253

图7-1 lprof默认输出例子 253

图7-2 lprof-x输出例子 254

7·4·4 总结报告 254

7·4·5 合并了的数据 255

图7-3 lprof-s输出例子 255

7·5 对档案或共享目标库代码进行梗概处理 256

7·6 注意事项 257

7·6·1 运行时麻烦 257

7·6·2 找不到数据文件 258

7·7 改善程序性能 258

7·7·1 对lprof程序执行prof和lprof 258

图7-4 prof输出 259

图7-5 函数CAfind()的lprof输出 259

图7-6 lprof对CAfind()新版本的输出 262

图7-7 对lprof的新版本的prof输出 263

图7-8 对一个测试完全集的lprof总结输出 264

7·8 改善测试覆盖率 264

图7-9 lprof-x的部分输出 265

7·8·1 搜寻没有文档化的任选项 265

7·8·2 从未调用的函数 265

图7-10 lprof-x对putdat()的输出 266

7·8·3 难于形成的出错条件 266

8·2·1 第一步:设置环境 267

第八章 cScope 267

8·1·1 cscope怎样工作 267

8·1 引言 267

8·2 怎样使用cscope 267

8·2·3 第三步:代码定位 268

8·2·2 第二步:调用cscope 268

图8-2 菜单操纵命令 269

图8-1 cscope任务菜单 269

图8-3 请求对正文串进行搜索 270

图8-4 cscope列举出包含正文串的那些行 271

图8-5 在初始搜索后可供使用的命令 271

图8-6 检查被cscope找到的代码行 272

图8-7 请求列出所有调用alloctest()的函数 273

图8-8 cscope列出调用alloctest()的函数 274

图8-9 cscope列出调用mymalloc()的函数 275

8·2·4 第四步:编辑代码 276

图8-10 用编辑程序检查dispinit() 276

8·2·5 命令行任选项 277

图8-11 使用cscope来解决问题 277

8·2·6 使用观察路径 279

8·2·7 对cscope和编辑程序调用进行栈处理 280

8·2·8·1 把常数改变成预处理程序符号 280

8·2·8 例子 280

图8-12 改变正文串 281

图8-13 cscope提示你选择要改变的行 282

图8-14 选择要改变的行的命令 282

图8-15 标记要改变的行 283

图8-16 cscope显示改变了的正文行 283

图8-17 从cscope中进入shell 284

8·2·8·2 给函数增加一个实参 284

8·3·1 不知道终端类型 285

8·3·2 编辑程序的命令行语法 285

8·3 注意事项 285

8·2·8·3 改变变量的值 285

第九章 make 287

9·1 引言 287

9·2 基本特性 287

9·3·2 续行 291

9·3·3 宏定义 291

9·3 描述文件和替换 291

9·3·1 注释 291

9·3·4 一般形式 292

9·3·5 依赖性信息 292

9·3·6 可执行命令 292

9·3·7 ?*、?@和?<的扩展 293

9·3·8 输出转换 293

9·3·9 递归的Makefile 294

9·3·10 后缀及转换规则 294

9·3·11 隐含规则 294

图9-1 默认的转换路径总结 295

9·3·12 档案库 296

9·3·13 源代码控制系统文件名 298

9·3·17 动态依赖性参数 299

9·3·15 蕴含的文件 299

9·3·14 空后缀 299

9·3·16 SCCS Makefile文件 299

9·4 命令用法 300

9·4·2 环境变量 301

9·4·1 make命令 301

9·5 建议和告诫 302

9·6 内部规则 303

图9-2 make的内部规则 303

10·2·1 术语 309

10·2·2 用admin创建一个SCCS文件 309

第十章 SCCS 309

10·1 引言 309

10·2 基本用法 309

10·2·3 用get检索一个文件 310

10·2·4 用delta记录改动 311

10·2·5 进一步讨论get 311

10·2·6 help命令 312

图10-1 一个SCCS文件的演变 313

10·3 delta编号 313

图10-2 带有分支delta的树形结构 314

10·4 SCCS命令约定 315

图10-3 扩展的分支概念 315

10·4·1 x·file和z·file 316

10·4·2 出错消息 316

10·5 SCCS命令 316

10·5·1 get命令 317

10·5·1·1 ID关键字 318

10·5·1·2 不同版本的检索 318

10·5·1·3 以产生delte为目的的检索 320

10·5·1·4 取消get-e 321

10·5·1·5 附加的get任选项 321

10·5·1·6 不同SID的并行编辑 321

10·5·1·7 相同SID的并行编辑 323

图10-4 新SID的确定 323

10·5·1·8 影响输出的关键字母 324

10·5·2 delta命令 325

10·5·3 admin命令 327

10·5·4 SCCS文件的创建 327

10·5·4·1 为初始delta插入注释 328

10·5·4·2 SCCS文件参数的初始化和修改 328

10·5·5 prs命令 329

10·5·7 help命令 331

10·5·8 rmdel命令 331

10·5·6 sact命令 331

10·5·9 cdc命令 332

10·5·10 what命令 332

10·5·11 sccsdiff命令 333

10·5·12 comb命令 333

10·5·14 vc命令 334

10·5·13 val命令 334

10·6 SCCS文件 334

10·6·1 保护 334

10·6·2 格式 335

10·6·3 审计 336

第十一章 lex 337

1 1·1 引言 337

11·2 生成一个词法分析器程序 337

图11-1 用lex创建和使用一个词法分析器 339

11·3 编写lex源 339

11·3·1 lex规则的基础 339

11·3·1·2 操作符 340

11·3·1·1 正则表达式 340

图11-2 lex操作符 342

11·3·1·3 动作 342

11·3·2·1 一些特殊特征 344

11·3·2 lex高级用法 344

11·3·2·2 lex例程 346

11·3·2·3 定义 348

11·3·2·4 启动条件 349

11·3·2·5 用户例程 351

11·4 lex与yacc一同使用 352

11·5 其它 354

11·6 源格式小结 355

第十二章 YACC 357

12·1 引言 357

12·2 基本的规格说明 359

12·2·1 动作 360

12·2·2 词法分析 363

12·3 语法分析程序的操作 365

12·4 歧义性和冲突 368

12·5 优先级 373

12·6 出错处理 376

12·7 yacc环境 379

12·8·1 输入风格 380

12·8·2 左递归 380

12·8 准备规格说明的一些建议 380

12·8·3 与词法有关的提示 381

12·9·1 在动作中模拟出错和接收 382

12·8·4 保留字 382

12·9·2 在封闭规则中存取值 382

12·9 一些进一步的论题 382

12·9·3 对任意类型值的支持 383

12·9·4 yacc输入语法 385

12·10 两个例子 387

12·10·1 一个简单的例子 387

12·10·2 一个高级的例子 390

第十三章 目标文件 397

13·1 引言 397

13·1·1 文件格式 397

图13-1 目标文件格式 398

13·1·2 数据表示 398

13·2 程序连接 399

图13-3 ELF头 399

图13-2 32位数据类型 399

13·2·1 ELF头 399

13·2·1·1 ELF标识 402

图13-4 e-ident[ ]标识索引 402

图13-5 数据编码ELFDATA2LSB 404

图13-6 数据编码ELFDATA2MSB 404

图13-7 WE32100标识,e-ident 405

13·2·1·2 3B2计算机专用的ELF头标志 405

图13-9 6386计算机标识,e-ident 405

13·2·1·3 6386计算机专用的ELF头标志 405

图13-8 处理机专用的标志,e-flags 405

13·2·2 节头 406

图13-10 特殊节的索引 406

图13-11 节头 407

图13-12 节类型,sh-type 409

图13-13 节头表表项,索引0 411

图13-14 节属性标志,sh-flags 411

图13-15 sh-link和sh-info的解释 412

13·2·2·1 特殊的节 412

图13-16 特殊的节 413

图13-17 特殊的节·got和·plt 415

13·2·3 串表 415

图13-18 串表 416

13·2·4 符号表 416

图13-19 串表索引 416

图13-20 符号表表项 417

图13-21 符号的约束条件,ELF32_ST_BIND 418

图13-22 符号的类型,ELF32_ST_TYPE 419

图13-23 符号表表项:索引0 420

13·2·5 重定位 420

13·2·4·1 符号值 420

图13-24 重定位表项 421

图13-25 3B2计算机的可重定位字段 422

13·2·5·1 3B2计算机专用的重定位类型 422

图13-26 3B2计算机的重定位类型 423

13·2·5·2 6386计算机专用的重定位类型 424

图13-27 6386计算机的可重定位字段 425

图13-28 6386计算机的重定位类型 426

13·3 程序执行 427

13·3·1 程序头 427

图13-29 程序头 428

图13-30 段类型,p-type 429

13·3·1·2 段权限 430

13·3·1·1 基地址 430

图13-31 段标志位,p-flags 430

图13-32 段权限 431

图13-33 正文段 431

13·3·1·3 段内容 431

图13-34 数据段 432

13·3·1·4 注意节 432

图13-35 注意信息 432

图13-36 注意段例 433

图13-37 可执行文件 434

13·3·2 处理机指定的程序装入 434

图13-38 程序头段 435

图13-39 进程映象段 436

图13-40 共享目标段编址的例子 437

13·3·4 动态连接程序 437

13·3·3 程序解释器 437

13·3·4·1 动态节 438

图13-41 动态结构 439

图13-42 动态数组标记,d-tag 440

13·3·4·2 共享目标依赖性 443

13·3·4·3 处理机指定的全局位移表 444

13·3·4·4 处理机指定的过程连接表 445

图13-43 全局位移表 445

图13-44 3B2计算机的过程连接表 446

图13-45 6386计算机绝对的过程连接表 447

图13-46 6386计算机位置独立的过程连接表 447

13·3·4·5 迟缓的符号联编 448

13·3·4·6 散列表 449

图13-47 符号散列表 449

13·3·4·7 初始化和终止函数 450

图13-48 散列函数 450

14·2 IEEE算术 451

14·1 引言 451

第十四章 浮点运算 451

14·2·1 数据类型和格式 452

14·2·1·2 双精度数 452

14·2·1·1 单精度数 452

14·2·2 规范化数 453

14·2·3 非规范化数 453

14·2·4 最大的和最小的可表示的值 453

14·2·5 某些特殊情况的值 453

14·2·6 NaN和无穷大 454

14·2·7 舍入控制 455

14·2·8 异常事件,粘着位和捕俘位 456

14·2·9 3B2计算机上的异常处理 457

14·2·10 6386计算机上的异常处理 458

14·3 二进制和十进制值之间的转换 459

14·4 单精度浮点运算 461

14·4·1 单精度函数 463

14·5 扩充的双精度 463

14·6·1 浮点格式到整数的转换 464

14·6·2 平方根 464

14·6·3 比较和无序条件 464

14·6 IEEE的要求 464

14·6·4·1 十进制的转换 465

14·6·4 输入/输出中的NaN和无穷大 465

第十五章 m4宏处理程序 467

15·1 概述 467

15·2·1 定义宏功能 469

15·2 m4宏功能 469

15·2·2 加引号 470

15·2·3 实参 471

15·2·4 内部运算功能 473

15·2·5 文件蕴含 474

15·2·6 转向 475

15·2·8 条件 475

15·2·7 系统命令 475

15·2·9 字符串操纵 476

15·2·10 打印 477

附录A 增强的asm工具 479

A·1 引言 479

A·2 例子 479

A·2·2 使用 480

A·2·1 定义 480

A·4 详细的描述 481

A·4·1 使用asm宏功能 481

A·3 术语的定义 481

A·4·2 定义 482

A·4·2·1 存储 482

A·4·2·2 asm体 483

A·5 写asm宏功能 483

附录B 映射文件任选项 485

B·1 引言 485

B·2 使用映射文件任选项 485

B·3·1 段声明 486

B·3 映射文件的结构和语法 486

B·3·2 映射指令 488

B·4 映射的例子 490

图B-1 用户定义的映射文件 490

B·3·3 长度符号声明 490

B·5 映射文件任选项的默认值 491

图B-2 默认映射文件 492

B·6 内部映射结构 493

图B-3 简单映射结构 493

B·7 出错信息 495

B·7·2 致命错误 495

B·7·1 告诫 495

词汇表 497