UNIXLinux程序设计教程
《UNIXLinux程序设计教程》
基本信息:
作者: 赵克佳
丛书名: 原创精品系列
出版社:机械工业出版社
ISBN:9787111403890
上架时间:2012-12-5
出版日期:2013 年1月
开本:16开
页码:1
版次:1-1
所属分类: 计算机 > 操作系统 > Linux
更多关于 》》》《UNIXLinux程序设计教程》
内容简介:
计算机书籍
《unix/linux程序设计教程》遵循最新的“统一unix规范版本4”,以linux为平台,系统地讲述了unix api各种函数的编程方法。本书内容包括unix的发展历程与标准、标准i/o和低级i/o、文件与目录操作、进程环境与进程控制、信号处理、时间与定时、终端i/o、高级i/o、进程之间的通信、套接字与网络通信、多线程编程。
《unix/linux程序设计教程》在介绍unix api各种函数的功能和用途的同时,清晰地阐述了它们所隐含的操作系统基本原理。书中给出了大量程序设计示例程序,有助于读者更好地掌握这些函数的功能、使用方法及编程技巧。
《unix/linux程序设计教程》特别适合于高等院校计算机专业的教师、高年级本科生、研究生作为教材和参考书,也特别适合从事计算机系统软件和应用软件开发的工程技术人员作为实用编程手册查阅。
目录:
《unix/linux程序设计教程》
前言
第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.1 tcp/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
本图书信息来源于:中国互动出版网