图书介绍

Linux/UNIX系统编程手册 下PDF|Epub|txt|kindle电子书版本网盘下载

Linux/UNIX系统编程手册 下
  • (德)MICHAEL KERRISK著;郭光伟,陈舸译 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:7115328670
  • 出版时间:2014
  • 标注页数:1176页
  • 文件大小:133MB
  • 文件页数:620页
  • 主题词:

PDF下载


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

下载说明

Linux/UNIX系统编程手册 下PDF格式电子书版下载

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

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

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

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

图书目录

第34章 进程组、会话和作业控制573

34.1 概述573

34.2 进程组575

34.3 会话577

34.4 控制终端和控制进程578

34.5 前台和后台进程组580

34.6 SIGHUP信号581

34.6.1 在shell中处理SIGHUP信号581

34.6.2 SIGHUP和控制进程的终止583

34.7 作业控制585

34.7.1 在shell中使用作业控制585

34.7.2 实现作业控制587

34.7.3 处理作业控制信号591

34.7.4 孤儿进程组(SIGHUP回顾)594

34.8 总结598

34.9 习题599

第35章 进程优先级和调度600

35.1 进程优先级(nice值)600

35.2 实时进程调度概述603

35.2.1 SCHED RR策略604

35.2.2 SCHED FIFO策略605

35.2.3 SCHED BATCH和SCHED IDLE策略605

35.3 实时进程调用API605

35.3.1 实时优先级范围606

35.3.2 修改和获取策略和优先级606

35.3.3 释放CPU611

35.3.4 SCHED RR时间片611

35.4 CPU亲和力612

35.5 总结614

35.6 习题615

第36章 进程资源617

36.1 进程资源使用617

36.2 进程资源限制619

36.3 特定资源限制细节623

36.4 总结627

36.5 习题627

第37章 DAEMON628

37.1 概述628

37.2 创建一个daemon629

37.3 编写daemon指南632

37.4 使用SIGHUP重新初始化一个daemon632

37.5 使用syslog记录消息和错误635

37.5.1 概述635

37.5.2 syslog API636

37.5.3 /etc/syslog.conf文件640

37.6 总结641

37.7 习题641

第38章 编写安全的特权程序642

38.1 是否需要一个Set-User-ID或Set-Group-ID程序?642

38.2 以最小权限操作643

38.3 小心执行程序645

38.4 避免暴露敏感信息646

38.5 确定进程的边界647

38.6 小心信号和竞争条件647

38.7 执行文件操作和文件I/O的缺陷648

38.8 不要完全相信输入和环境648

38.9 小心缓冲区溢出649

38.10 小心拒绝服务攻击650

38.11 检查返回状态和安全地处理失败情况651

38.12 总结651

38.13 习题652

第39章 能力653

39.1 能力基本原理653

39.2 Linux能力654

39.3 进程和文件能力654

39.3.1 进程能力654

39.3.2 文件能力655

39.3.3 进程许可和有效能力集的目的657

39.3.4 文件许可和有效能力集的目的657

39.3.5 进程和文件可继承集的目的658

39.3.6 在shell中给文件赋予能力和查看文件能力658

39.4 现代能力实现659

39.5 在exec()中转变进程能力659

39.5.1 能力边界集660

39.5.2 保持root语义660

39.6 改变用户ID对进程能力的影响661

39.7 用编程的方式改变进程能力661

39.8 创建仅包含能力的环境665

39.9 发现程序所需的能力667

39.10 不具备文件能力的老式内核和系统667

39.11 总结669

39.12 习题669

第40章 登录记账670

40.1 utmp和wtmp文件概述670

40.2 utmpx API671

40.3 utmpx结构671

40.4 从utmp和wtmp文件中检索信息673

40.5 获取登录名称:getlogin()676

40.6 为登录会话更新utmp和wtmp文件677

40.7 lastlog文件681

40.8 总结683

40.9 习题683

第41章 共享库基础684

41.1 目标库684

41.2 静态库685

41.3 共享库概述686

41.4 创建和使用共享库——首回合687

41.4.1 创建一个共享库687

41.4.2 位置独立的代码687

41.4.3 使用一个共享库688

41.4.4 共享库soname689

41.5 使用共享库的有用工具691

41.6 共享库版本和命名规则692

41.7 安装共享库694

41.8 兼容与不兼容库比较696

41.9 升级共享库697

41.10 在目标文件中指定库搜索目录698

41.11 在运行时找出共享库700

41.12 运行时符号解析700

41.13 使用静态库取代共享库701

41.14 总结702

41.15 习题703

第42章 共享库高级特性704

42.1 动态加载库704

42.1.1 打开共享库:dlopen()705

42.1.2 错误诊断:dlerror()706

42.1.3 获取符号的地址:dlsym()707

42.1.4 关闭共享库:dlclose()709

42.1.5 获取与加载的符号相关的信息:dladdr()710

42.1.6 在主程序中访问符号710

42.2 控制符号的可见性710

42.3 链接器版本脚本711

42.3.1 使用版本脚本控制符号的可见性712

42.3.2 符号版本化713

42.4 初始化和终止函数715

42.5 预加载共享库716

42.6 监控动态链接器:LD_DEBUG716

42.7 总结717

42.8 习题718

第43章 进程间通信简介719

43.1 IPC工具分类719

43.2 通信工具720

43.3 同步工具721

43.4 IPC工具比较723

43.5 总结727

43.6 习题727

第44章 管道和FIFO728

44.1 概述728

44.2 创建和使用管道730

44.3 将管道作为一种进程同步的方法735

44.4 使用管道连接过滤器737

44.5 通过管道与Shell命令进行通信:popen()739

44.6 管道和stdio缓冲743

44.7 FIFO743

44.8 使用管道实现一个客户端/服务器应用程序745

44.9 非阻塞I/O751

44.10 管道和FIFO中read()和write()的语义752

44.11 总结753

44.12 习题754

第45章 System V IPC介绍756

45.1 概述757

45.2 IPC Key759

45.3 关联数据结构和对象权限761

45.4 IPC标识符和客户端/服务器应用程序763

45.5 System V IPC get调用使用的算法764

45.6 ipcs和ipcrm命令766

45.7 获取所有IPC对象列表767

45.8 IPC限制767

45.9 总结768

45.10 习题768

第46章 System V消息队列769

46.1 创建或打开一个消息队列769

46.2 交换消息771

46.2.1 发送消息772

46.2.2 接收消息774

46.3 消息队列控制操作777

46.4 消息队列关联数据结构778

46.5 消息队列的限制780

46.6 显示系统中所有消息队列781

46.7 使用消息队列实现客户端/服务器应用程序783

46.8 使用消息队列实现文件服务器应用程序784

46.9 System V消息队列的缺点790

46.10 总结790

46.11 习题791

第47章 System V信号量792

47.1 概述793

47.2 创建或打开一个信号量集795

47.3 信号量控制操作796

47.4 信号量关联数据结构798

47.5 信号量初始化801

47.6 信号量操作803

47.7 多个阻塞信号量操作的处理809

47.8 信号量撤销值810

47.9 实现一个二元信号量协议811

47.10 信号量限制814

47.11 System V信号量的缺点815

47.12 总结816

47.13 习题817

第48章 System V共享内存818

48.1 概述818

48.2 创建或打开一个共享内存段819

48.3 使用共享内存820

48.4 示例:通过共享内存传输数据821

48.5 共享内存在虚拟内存中的位置825

48.6 在共享内存中存储指针828

48.7 共享内存控制操作829

48.8 共享内存关联数据结构830

48.9 共享内存的限制832

48.10 总结833

48.11 习题833

第49章 内存映射835

49.1 概述835

49.2 创建一个映射:mmap()837

49.3 解除映射区域:munmap()840

49.4 文件映射840

49.4.1 私有文件映射841

49.4.2 共享文件映射842

49.4.3 边界情况845

49.4.4 内存保护和文件访问模式交互846

49.5 同步映射区域:msync()847

49.6 其他mmap()标记848

49.7 匿名映射849

49.8 重新映射一个映射区域:mremap()852

49.9 MAP_NORESERVE和过度利用交换空间853

49.10 MAP_FIXED标记854

49.11 非线性映射:remap_file_pages()855

49.12 总结857

49.13 习题858

第50章 虚拟内存操作859

50.1 改变内存保护:mprotect()859

50.2 内存锁:mlock()和mlockatt()861

50.3 确定内存驻留性:mincore()864

50.4 建议后续的内存使用模式:madvise()866

50.5 小结868

50.6 习题868

第51章 POSIX IPC介绍869

51.1 API概述869

51.2 System V IPC与POSIX IPC比较872

51.3 总结873

第52章 POSIX消息队列874

52.1 概述874

52.2 打开、关闭和断开链接消息队列875

52.3 描述符和消息队列之间的关系877

52.4 消息队列特性878

52.5 交换消息882

52.5.1 发送消息882

52.5.2 接收消息883

52.5.3 在发送和接收消息时设置超时时间885

52.6 消息通知886

52.6.1 通过信号接收通知887

52.6.2 通过线程接收通知889

52.7 Linux特有的特性891

52.8 消息队列限制892

52.9 POSIX和System V消息队列比较893

52.10 总结894

52.11 习题894

第53章 POSIX信号量895

53.1 概述895

53.2 命名信号量895

53.2.1 打开一个命名信号量896

53.2.2 关闭一个信号量898

53.2.3 删除一个命名信号量898

53.3 信号量操作899

53.3.1 等待一个信号量899

53.3.2 发布一个信号量901

53.3.3 获取信号量的当前值901

53.4 未命名信号量903

53.4.1 初始化一个未命名信号量904

53.4.2 销毁一个未命名信号量906

53.5 与其他同步技术比较906

53.6 信号量的限制907

53.7 总结908

53.8 习题908

第54章 POSIX共享内存909

54.1 概述909

54.2 创建共享内存对象910

54.3 使用共享内存对象913

54.4 删除共享内存对象915

54.5 共享内存APIs比较915

54.6 总结916

54.7 习题917

第55章 文件加锁918

55.1 概述918

55.2 使用flock()给文件加锁920

55.2.1 锁继承与释放的语义922

55.2.2 flock()的限制923

55.3 使用fcntl()给记录加锁923

55.3.1 死锁928

55.3.2 示例:一个交互式加锁程序928

55.3.3 示例:一个加锁函数库931

55.3.4 锁的限制和性能933

55.3.5 锁继承和释放的语义934

55.3.6 锁定饿死和排队加锁请求的优先级935

55.4 强制加锁935

55.5 /proc/locks文件938

55.6 仅运行一个程序的单个实例939

55.7 老式加锁技术941

55.8 总结942

55.9 习题943

第56章 SOCKET:介绍945

56.1 概述945

56.2 创建一个socket:socket()948

56.3 将socket绑定到地址:bind()948

56.4 通用socket地址结构:struct sockaddr949

56.5 流socket950

56.5.1 监听接入连接:listen()951

56.5.2 接受连接:accept()952

56.5.3 连接到对等socket:connect()952

56.5.4 流socket I/O953

56.5.5 连接终止:close()953

56.6 数据报socket953

56.6.1 交换数据报:recvfrom和sendto()954

56.6.2 在数据报socket上使用connect()955

56.7 总结956

第57章 SOCKET:UNIX DOMAIN957

57.1 UNIX domain socket地址:struct sockaddr un957

57.2 UNIX domain中的流socket959

57.3 UNIX domain中的数据报socket962

57.4 UNIX domain socket权限965

57.5 创建互联socket对:socketpair()965

57.6 Linux抽象socket名空间966

57.7 总结967

57.8 习题967

第58章 SOCKET:TCP/IP网络基础968

58.1 因特网968

58.2 联网协议和层969

58.3 数据链路层971

58.4 网络层:IP971

58.5 IP地址973

58.6 传输层975

58.6.1 端口号975

58.6.2 用户数据报协议(UDP)976

58.6.3 传输控制协议(TCP)977

58.7 请求注解(RFC)979

58.8 总结980

第59章 SOCKET:Internet DOMAIN982

59.1 Internet domain socket982

59.2 网络字节序982

59.3 数据表示984

59.4 Internet socket地址986

59.5 主机和服务转换函数概述988

59.6 inet_pton()和inet_ntop()函数989

59.7 客户端-服务器示例(数据报socket)990

59.8 域名系统(DNS)992

59.9 /etc/services文件994

59.10 独立于协议的主机和服务转换995

59.10.1 getaddrinfo()函数996

59.10.2 释放addrinfo列表:freeaddrinfo()998

59.10.3 错误诊断:gai_strerror()999

59.10.4 getnameinfo()函数999

59.11 客户端-服务器示例(流式socket)1000

59.12 Internet domain socket库1006

59.13 过时的主机和服务转换API1010

59.13.1 inet aton()和inet ntoa()函数1010

59.13.2 gethostbyname()和gethostbyaddr()函数1010

59.13.3 getserverbyname()和getserverbyport()函数1012

59.14 UNIX与Internet domain socket比较1013

59.15 更多信息1014

59.16 总结1014

59.17 习题1015

第60章 SOCKET:服务器设计1016

60.1 迭代型和并发型服务器1016

60.2 迭代型UDP echo服务器1016

60.3 并发型TCP echo服务器1019

60.4 并发型服务器的其他设计方案1021

60.5 inetd(Internet超级服务器)守护进程1023

60.6 总结1027

60.7 练习1027

第61章 SOCKET:高级主题1028

61.1 流式套接字上的部分读和部分写1028

61.2 shutdown()系统调用1030

61.3 专用于套接字的I/O系统调用:recv()和send()1033

61.4 sendfile()系统调用1034

61.5 获取套接字地址1036

61.6 深入探讨TCP协议1039

61.6.1 TCP报文的格式1039

61.6.2 TCP序列号和确认机制1041

61.6.3 TCP协议状态机以及状态迁移图1041

61.6.4 TCP连接的建立1043

61.6.5 TCP连接的终止1044

61.6.6 在TCP套接字上调用shutdown()1045

61.6.7 TIME_WAIT状态1045

61.7 监视套接字:netstat1047

61.8 使用tcpdump来监视TCP流量1048

61.9 套接字选项1049

61.10 SO_REUSEADDR套接字选项1050

61.11 在accept()中继承标记和选项1051

61.12 TCP vsUDP1052

61.13 高级功能1053

61.13.1 带外数据1053

61.13.2 sendmsg()和recvmsg()系统调用1053

61.13.3 传递文件描述符1054

61.13.4 接收发送端的凭据1054

61.13.5 顺序数据包套接字1055

61.13.6 SCTP以及DCCP传输层协议1055

61.14 总结1056

61.15 练习1056

第62章 终端1058

62.1 整体概览1059

62.2 获取和修改终端属性1060

62.3 stty命令1062

62.4 终端特殊字符1063

62.5 终端标志1068

62.6 终端的I/O模式1073

62.6.1 规范模式1073

62.6.2 非规范模式1074

62.6.3 加工模式、cbreak模式以及原始模式1075

62.7 终端线速(比特率)1081

62.8 终端的行控制1082

62.9 终端窗口大小1084

62.10 终端标识1085

62.11 总结1086

62.12 练习1087

第63章 其他备选的I/O模型1088

63.1 整体概览1088

63.1.1 水平触发和边缘触发1091

63.1.2 在备选的I/O模型中采用非阻塞I/O1092

63.2 I/O多路复用1092

63.2.1 select()系统调用1092

63.2.2 poll()系统调用1097

63.2.3 文件描述符何时就绪?1101

63.2.4 比较select()和poll()1103

63.2.5 select()和poll()存在的问题1105

63.3 信号驱动I/O1105

63.3.1 何时发送“I/O就绪”信号1109

63.3.2 优化信号驱动I/O的使用1110

63.4 epoll编程接口1113

63.4.1 创建epoll实例:epoll_create()1113

63.4.2 修改epoll的兴趣列表:epoll_ctl()1114

63.4.3 事件等待:epoll_wait()1115

63.4.4 深入探究epoll的语义1120

63.4.5 epoll同I/O多路复用的性能对比1121

63.4.6 边缘触发通知1122

63.5 在信号和文件描述符上等待1124

63.5.1 pselect()系统调用1125

63.5.2 self-pipe技巧1126

63.6 总结1128

63.7 练习1129

第64章 伪终端1130

64.1 整体概览1130

64.2 UNIX98伪终端1133

64.2.1 打开未使用的主设备:posix_openpt()1134

64.2.2 修改从设备属主和权限:grantpt()1135

64.2.3 解锁从设备:unlockpt()1135

64.2.4 获取从设备名称:ptsname()1136

64.3 打开主设备:ptyMasterOpen()1136

64.4 将进程连接到伪终端:ptyFork()1138

64.5 伪终端I/O1140

64.6 实现script(1)程序1142

64.7 终端属性和窗口大小1146

64.8 BSD风格的伪终端1146

64.9 总结1148

64.10 练习1149

附录A 跟踪系统调用1151

附录B 解析命令行选项1153

附录C 对NULL指针做转型1159

附录D 内核配置1161

附录E 更多信息源1162

附录F 部分习题解答1167

热门推荐