当前位置:主页 > 书籍配套资源 > 程序设计配套资源
《UNIX/Linux程序设计教程》源代码

《UNIX/Linux程序设计教程》源代码

  • 更新:2022-06-11
  • 大小:9.5 MB
  • 类别:程序设计
  • 作者:赵克佳、沈志宇
  • 出版:机械工业出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

本书在介绍UNIX API各种函数的功能和用途的同时,清晰地阐述了它们所隐含的操作系统基本原理。书中给出了大量程序设计示例程序,有助于读者更好地掌握这些函数的功能、使用方法及编程技巧。

封面图

目录

  • 前言
  • 第1章UNIX导论1
  • 1.1UNIX简史1
  • 1.1.1UNIX的诞生1
  • 1.1.2UNIX的早期发展2
  • 1.1.3BSD UNIX3
  • 1.1.4系统V UNIX3
  • 1.1.5UNIX的商业化4
  • 1.1.6Linux4
  • 1.2标准5
  • 1.2.1SVID5
  • 1.2.2POSIX6
  • 1.2.3统一UNIX规范6
  • 1.2.4C标准8
  • 1.3UNIX基本概念8
  • 1.3.1程序和进程8
  • 1.3.2内核9
  • 1.3.3shell10
  • 1.3.4用户名与用户ID、用户组与组ID11
  • 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.3sysconf()、pathconf()和fpathconf()函数23
  • 1.9思考与练习27
  • 第2章标准输入输出28
  • 2.1UNIX 输入输出基本概念28
  • 2.2流和FILE对象30
  • 2.3打开和关闭流31
  • 2.4读和写流33
  • 2.4.1字符I/O33
  • 2.4.2行I/O34
  • 2.4.3读回退37
  • 2.4.4块I/O38
  • 2.5文件定位40
  • 2.6文件结束和错误指示器42
  • 2.7流缓冲43
  • 2.8格式I/O46
  • 2.8.1格式输出47
  • 2.8.2格式输入50
  • 2.9临时文件53
  • 2.10思考与练习55
  • 第3章低级输入输出56
  • 3.1文件描述字的打开、创建和关闭56
  • 3.2read()和write()函数60
  • 3.3设置描述字的文件位置61
  • 3.4dup()和dup2()函数64
  • 3.5fdopen()和fileno()函数65
  • 3.6文件控制函数fcntl()65
  • 3.6.1重复文件描述字66
  • 3.6.2文件描述字标签67
  • 3.6.3文件状态标签68
  • 3.7非阻塞I/O71
  • 3.8readv()和writev()函数73
  • 3.9fsync()和fdatasync()函数74
  • 3.10思考与练习75
  • 第4章文件与目录77
  • 4.1文件77
  • 4.1.1stat()、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.1chown()、fchown()和lchown()函数86
  • 4.4文件方式87
  • 4.4.1文件访问权限88
  • 4.4.2调整用户ID和调整组ID89
  • 4.4.3 sticky位90
  • 4.4.4文件方式位小结91
  • 4.5确定和改变文件方式92
  • 4.5.1umask()函数92
  • 4.5.2chmod()和fchmod()函数94
  • 4.5.3access()函数94
  • 4.6文件大小96
  • 4.6.1截断文件97
  • 4.7文件时间99
  • 4.7.1utime()和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.1main()函数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.6setjmp()和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.6system()函数163
  • 6.7进程组164
  • 6.8会晤期165
  • 6.9控制终端166
  • 6.10作业控制168
  • 6.11思考与练习174
  • 第7章信号处理175
  • 7.1信号概念175
  • 7.2UNIX 信号177
  • 7.2.1程序错误类信号179
  • 7.2.2程序中止类信号180
  • 7.2.3闹钟类信号180
  • 7.2.4I/O类信号180
  • 7.2.5作业控制类信号181
  • 7.2.6操作错误类信号181
  • 7.2.7其他信号182
  • 7.3生成信号182
  • 7.3.1raise()函数182
  • 7.3.2kill()函数183
  • 7.4设置信号的动作184
  • 7.4.1signal()函数184
  • 7.4.2进程初启时的信号动作186
  • 7.4.3不可靠信号187
  • 7.4.4sigaction()函数188
  • 7.5信号句柄191
  • 7.5.1正常返回的信号句柄192
  • 7.5.2终止进程的句柄192
  • 7.6阻塞信号193
  • 7.6.1sigset_t类型和信号集操作193
  • 7.6.2设置信号屏蔽194
  • 7.6.3检查悬挂信号196
  • 7.7等待信号197
  • 7.7.1pause()函数197
  • 7.7.2sigsuspend()函数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.1SA_SIGINFO标志213
  • 7.10.2发送实时信号217
  • 7.10.3等待实时信号219
  • 7.11思考与练习221
  • 第8章时间与定时222
  • 8.1系统时钟222
  • 8.1.1time()函数222
  • 8.1.2gettimeofday()函数223
  • 8.2时间格式转换224
  • 8.2.1分解的日历时间224
  • 8.2.2格式化日期与时间227
  • 8.3CPU时间与墙钟时间229
  • 8.3.1clock()函数230
  • 8.3.2times()函数231
  • 8.4睡眠与定时233
  • 8.4.1sleep()函数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/O247
  • 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.3GTI控制接口254
  • 9.3.1termios数据结构254
  • 9.3.2GTI控制函数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.6stty命令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/O279
  • 10.1文件锁279
  • 10.1.1fcntl()文件锁操作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/O291
  • 10.3.1select()函数291
  • 10.3.2poll()函数294
  • 10.4异步I/O296
  • 10.4.1异步I/O控制块297
  • 10.4.2I/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/O308
  • 10.6思考与练习314
  • 第11章进程间通信316
  • 11.1管道316
  • 11.1.1创建管道317
  • 11.1.2父子进程间的管道通信317
  • 11.1.3连接标准输入和标准输出的管道319
  • 11.1.4popen()和pclose()函数321
  • 11.1.5管道I/O的原子性322
  • 11.2FIFO特别文件323
  • 11.2.1创建FIFO323
  • 11.2.2FIFO操作325
  • 11.2.3FIFO用于客户/服务通信328
  • 11.3系统V IPC331
  • 11.3.1关键字和标识332
  • 11.3.2IPC资源描述结构与成员ipc_perm333
  • 11.3.3ipcs和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.1IP地址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.3getsockname()和getpeername()函数385
  • 12.6.4多客户服务386
  • 12.6.5send()和recv()函数388
  • 12.7套接字选项390
  • 12.8带外数据392
  • 12.8.1TCP带外数据392
  • 12.8.2带外数据的发送和接收393
  • 12.8.3带外数据标志397
  • 12.9数据报套接字操作399
  • 12.9.1sendto()和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.3Pthreads线程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_THREAD480
  • 14.5思考与练习483
  • 参考文献484

资源下载

资源下载地址1:https://pan.baidu.com/s/1wBTg9Kmd3rSLiCZLcJtaHg

相关资源

网友留言