《UNIX/Linux程序设计教程》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:赵克佳,沈志宇编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2013
  • ISBN:9787111403890
  • 页数:484 页
图书介绍:本书遵循最新的“统一UNIX规范版本4”,以Linux为平台,系统地讲述了UNIX API各种函数的编程方法。在保留《UNIX程序设计教程》第一版讲述透彻、深入浅出特点的基础上,本书第二版对全书内容做了较大修订,并增加了实时和多线程程序设计内容。本书内容包括UNIX的发展历程与标准,标准I/O和低级I/O,文件与目录操作,进程环境与进程控制,信号处理,日期和时间,终端I/O,高级I/O,进程之间的通信,套接字与网络通信,多线程编程。

第1章UNIX导论 1

1.1 UNIX简史 1

1.1.1 UNIX的诞生 1

1.1.2 UNIX的早期发展 2

1.1.3 BSD UNIX 3

1.1.4系统V UNIX 3

1.1.5 UNIX的商业化 4

1.1.6 Linux 4

1.2标准 5

1.2.1 SVID 5

1.2.2 POSIX 6

1.2.3统一UNIX规范 6

1.2.4 C标准 8

1.3 UNIX基本概念 8

1.3.1程序和进程 8

1.3.2内核 9

1.3.3 shell 10

1.3.4用户名与用户ID、用户组与组ID 11

1.3.5特权用户 12

1.3.6系统调用与库函数 12

1.4系统库 13

1.4.1头文件 14

1.4.2保留字 14

1.4.3特征测试宏 15

1.5示例程序和编译环境 16

1.6错误处理 17

1.7系统信息 19

1.7.1机器标识 19

1.7.2硬件/软件类型识别 19

1.8系统能力限制 20

1.8.1一般能力限制值 21

1.8.2系统和文件特征选项 22

1.8.3 sysconf()、 pathconf()和fpathconf()函数 23

1.9思考与练习 27

第2章 标准输入输出 28

2.1 UNIX输入输出基本概念 28

2.2流和FILE对象 30

2.3打开和关闭流 31

2.4读和写流 33

2.4.1字符I/O 33

2.4.2行I/O 34

2.4.3读回退 37

2.4.4块I/O 38

2.5文件定位 40

2.6文件结束和错误指示器 42

2.7流缓冲 43

2.8格式I/O 46

2.8.1格式输出 47

2.8.2格式输入 50

2.9临时文件 53

2.10思考与练习 55

第3章 低级输入输出 56

3.1文件描述字的打开、创建和关闭 56

3.2 read()和write()函数 60

3.3设置描述字的文件位置 61

3.4 dup()和dup2()函数 64

3.5 fdopen()和fileno() 函 函数 65

3.6文件控制函数fcntl() 65

3.6.1重复文件描述字 66

3.6.2文件描述字标签 67

3.6.3文件状态标签 68

3.7非阻塞I/O 71

3.8 readv()和writev()函数 73

3.9 fsync()和fdatasync()函数 74

3.10思考与练习 75

第4章 文件与目录 77

4.1文件 77

4.1.1 stat()、 fstat()和lstat()函数 78

4.2文件类型 79

4.2.1普通文件 79

4.2.2目录 80

4.2.3链接与link()函数 80

4.2.4符号链接与symlink()和readlink()函数 82

4.2.5特别文件 83

4.2.6测试文件的类型 84

4.3文件的属主和用户组 85

4.3.1 chown() 、 fchown()和lchown()函数 86

4.4文件方式 87

4.4.1文件访问权限 88

4.4.2调整用户ID和调整组ID 89

4.4.3 sticky位 90

4.4.4文件方式位小结 91

4.5确定和改变文件方式 92

4.5.1 umask()函数 92

4.5.2 chmod()和fchmod()函数 94

4.5.3 access()函数 94

4.6文件大小 96

4.6.1截断文件 97

4.7文件时间 99

4.7.1 utime()和utimes()函数 99

4.8文件的删除与换名 101

4.8.1删除文件和目录 101

4.8.2文件换名 103

4.9目录操作 104

4.9.1工作目录 104

4.9.2创建目录 105

4.9.3读目录流 106

4.9.4对目录流的随机访问 109

4.10思考与练习 109

第5章 进程环境 111

5.1 main()函数 111

5.2命令行参数 111

5.2.1命令行参数的语法约定 112

5.2.2扫描命令行中的选项 113

5.3环境变量 115

5.3.1环境表 116

5.3.2访问环境 117

5.4终止进程 118

5.4.1出口状态 119

5.4.2终止前的清理 119

5.4.3流产程序 120

5.5进程的存储空间 121

5.5.1进程的地址空间 122

5.5.2动态存储分配与释放 123

5.5.3释放分配的存储单元 126

5.6 setjmp()和longjmp()函数 127

5.7进程资源 130

5.7.1查看与设置资源限制 131

5.7.2资源使用统计 132

5.8用户信息 133

5.8.1用户名 133

5.8.2用户数据库 134

5.8.3组数据库 136

5.9进程的身份凭证 139

5.10调整进程的身份 141

5.11思考与练习 146

第6章 进程控制 147

6.1进程标识 147

6.2进程创建 148

6.3执行一个新程序 151

6.4等待进程完成 155

6.5进程终止与僵死进程 159

6.6 system()函数 163

6.7进程组 164

6.8会晤期 165

6.9控制终端 166

6.10作业控制 168

6.11思考与练习 174

第7章 信号处理 175

7.1信号概念 175

7.2 UNIX信号 177

7.2.1程序错误类信号 179

7.2.2程序中止类信号 180

7.2.3闹钟类信号 180

7.2.4 I/O类信号 180

7.2.5作业控制类信号 181

7.2.6操作错误类信号 181

7.2.7其他信号 182

7.3生成信号 182

7.3.1 raise()函数 182

7.3.2 kill()函数 183

7.4设置信号的动作 184

7.4.1 signal()函数 184

7.4.2进程初启时的信号动作 186

7.4.3不可靠信号 187

7.4.4 sigaction()函数 188

7.5信号句柄 191

7.5.1正常返回的信号句柄 192

7.5.2终止进程的句柄 192

7.6阻塞信号 193

7.6.1 sigset t类型和信号集操作 193

7.6.2设置信号屏蔽 194

7.6.3检查悬挂信号 196

7.7等待信号 197

7.7.1 pause()函数 197

7.7.2 sigsuspend()函数 198

7.8使用分开的信号栈 201

7.9信号句柄编程技巧 204

7.9.1句柄内非局部控制转移 204

7.9.2可重入函数与异步信号安全函数 207

7.9.3被信号中断的系统调用 210

7.9.4原子数据 211

7.10实时信号 212

7.10.1 SA SIGINFO标志 213

7.10.2发送实时信号 217

7.10.3等待实时信号 219

7.11思考与练习 221

第8章 时间与定时 222

8.1系统时钟 222

8.1.1 time()函数 222

8.1.2 gettimeofday()函数 223

8.2时间格式转换 224

8.2.1分解的日历时间 224

8.2.2格式化日期与时间 227

8.3 CPU时间与墙钟时间 229

8.3.1 clock()函数 230

8.3.2 times()函数 231

8.4睡眠与定时 233

8.4.1 sleep()函数 233

8.4.2设置定时器 233

8.5实时时钟与定时 237

8.5.1实时时钟 238

8.5.2实时睡眠 240

8.5.3实时定时器 241

8.5.4创建和删除实时定时器 241

8.5.5设置实时定时器 243

8.5.6定时器超期计数 244

8.6思考与练习 246

第9章 终端I/O 247

9.1需要改变终端设置的例子 247

9.2终端I/O概述 249

9.2.1终端 249

9.2.2串行端口 250

9.2.3终端设备文件 252

9.2.4输入输出队列 252

9.2.5加工和非加工输入方式 253

9.3 GTI控制接口 254

9.3.1 termios数据结构 254

9.3.2 GTI控制函数 255

9.4终端属性 256

9.4.1输入方式 256

9.4.2输出方式 257

9.4.3控制方式 258

9.4.4局部方式 259

9.4.5特殊字符 260

9.4.6 stty命令 263

9.5终端标识 263

9.6改变终端属性 265

9.7加工方式与非加工方式输入 266

9.7.1加工方式输入 266

9.7.2非加工方式输入 267

9.8设置波特率 272

9.9行控制函数 273

9.10串行端口程序设计 275

9.11思考与练习 278

第10章 高级I/O 279

10.1文件锁 279

10.1.1 fcntl()文件操作 280

10.1.2锁的测试、请求和释放 282

10.1.3文件锁与进程和文件的关系 286

10.1.4死锁 287

10.1.5建议锁与强制锁 288

10.2信号驱动的I/O 289

10.3多路转接I/O 291

10.3.1 select()函数 291

10.3.2 poll()函数 294

10.4异步I/O 296

10.4.1异步I/O控制块 297

10.4.2 I/O完成时的信号交付 298

10.4.3异步I/O的优先级 299

10.4.4异步I/O函数 299

10.4.5异步I/O之例 304

10.4.6异步I/O注意事项 307

10.5存储映射I/O 308

10.6思考与练习 314

第11章 进程间通信 316

11.1管道 316

11.1.1创建管道 317

11.1.2父子进程间的管道通信 317

11.1.3连接标准输入和标准输出的管道 319

11.1.4 popen()和pclose()函数 321

11.1.5管道I/O的原子性 322

11.2 FIFO特别文件 323

11.2.1创建FIFO 323

11.2.2 FIFO操作 325

11.2.3 FIFO用于客户/服务通信 328

11.3系统V IPC 331

11.3.1关键字和标识 332

11.3.2 IPC资源描述结构与成员ipc-perm 333

11.3.3 ipcs和ipcrm命令 334

11.4消息队列 334

11.4.1创建和获得消息队列 336

11.4.2消息队列的查询、设置和删除 337

11.4.3发送和接收消息 339

11.5共享存储段 343

11.5.1创建和获得共享存储段 343

11.5.2共享存储段的查询、设置和删除 344

11.5.3共享存储段的连接和分离 345

11.6信号量 347

11.6.1创建和获得信号量标识 348

11.6.2信号量的查询、设置和删除 350

11.6.3信号量操作 352

11.7思考与练习 357

第12章 套接字与网络通信 358

12.1TCP/IP协议 358

12.2套接字 360

12.3套接字地址结构 364

12.3.1 IP地址 364

12.3.2域名地址 366

12.3.3服务与端口号 369

12.3.4套接字地址数据结构 371

12.3.5字节顺序 373

12.4命名套接字 374

12.5套接字通信模式 377

12.6流套接字操作 379

12.6.1请求连接 379

12.6.2接收连接 381

12.6.3 getsockname()和getpeername()函数 385

12.6.4多客户服务 386

12.6.5 send()和recv()函数 388

12.7套接字选项 390

12.8带外数据 392

12.8.1 TCP带外数据 392

12.8.2带外数据的发送和接收 393

12.8.3带外数据标志 397

12.9数据报套接字操作 399

12.9.1 sendto()和recvfrom()函数 399

12.9.2数据报套接字客户/服务之例 400

12.9.3使用connect()函数 403

12.10超时处理 404

12.11思考与练习 405

第13章 线程 406

13.1线程概念 406

13.1.1什么是线程 406

13.1.2线程的好处 409

13.1.3 Pthreads线程 412

13.1.4线程标识 413

13.2创建线程 414

13.3终止线程 415

13.3.1等待线程终止 416

13.3.2可汇合与分离的线程 418

13.4创建特殊属性的线程 420

13.5互斥变量 425

13.5.1互斥变量的初始化和销毁 427

13.5.2互斥变量属性 428

13.5.3互斥变量的加锁与解锁 431

13.5.4互斥变量与spin锁 433

13.6读写锁 435

13.6.1读写锁的初始化和销毁 435

13.6.2读写锁的上锁与解锁 436

13.7条件变量 439

13.7.1创建和销毁条件变量 441

13.7.2条件变量属性 441

13.7.3等待条件变量 443

13.7.4唤醒条件变量等待 445

13.8思考与练习 448

第14章 线程高级特征 450

14.1线程专有数据 450

14.1.1线程专有数据键的创建和删除 451

14.1.2使用线程专有数据 454

14.2取消线程 456

14.2.1线程的可取消属性 457

14.2.2取消线程与取消点 458

14.2.3异步取消的安全性 461

14.2.4现场清理 462

14.3线程调度 464

14.3.1线程调度竞争范围 465

14.3.2调度策略与优先级 467

14.3.3线程调度属性 469

14.3.4动态改变线程的调度策略和优先级 471

14.4线程与信号 474

14.4.1信号动作 474

14.4.2信号屏蔽 475

14.4.3向线程发送信号 476

14.4.4等待信号 477

14.4.5一种新的事件通知方法:SIGEV THREAD 480

14.5思考与练习 483

参考文献 484