在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Linux内核编程 → --Linux环境编程:从应用到内核 (Linux-Unix技术丛书)--高清完整标签带笔记版

--Linux环境编程:从应用到内核 (Linux-Unix技术丛书)--高清完整标签带笔记版

Linux内核编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:18.41M
  • 下载次数:8
  • 浏览次数:18
  • 发布时间:2022-07-01
  • 实例类别:Linux内核编程
  • 发 布 人:luckydogjack
  • 文件格式:.pdf
  • 所需积分:4
 相关标签: linux环境 linux UNIX APUE 高清 c 内核

实例介绍

【实例简介】--Linux环境编程:从应用到内核 (Linux-Unix技术丛书)--高清完整标签带笔记版

--Linux环境编程:从应用到内核 (Linux-Unix技术丛书)--高清完整标签带笔记版

【实例截图】

【核心代码】
本书定位为APUE的补充或进阶读物,所以假设读者已具备了一定的编程基础,对Linux环境也有所
了解,因此在涉及一些基本概念和知识时,只是蜻蜓点水,简单略过。因为笔者希望把更多的笔墨放
在更为重要的部分,而不是各种相关图书均有讲解的基本概念上。所以如果你是初学者,建议还是先
学习APUE、C语言编程,并且在具有一定的操作系统知识后再来阅读本书。


目录
前言
第 0 章 基础知识
0.1  一个 Linux 程序的诞生记
0.2  程序的构成
0.3  程序是如何 “ 跑 ” 的
0.4  背景概念介绍
0.4.1  系统调用
0.4.2   C 库函数
0.4.3  线程安全
0.4.4  原子性
0.4.5  可重入函数
0.4.6  阻塞与非阻塞
0.4.7  同步与非同步
第 1 章 文件 I/O
1.1   Linux 中的文件
1.1.1  文件、文件描述符和文件表
1.1.2  内核文件表的实现
1.2  打开文件
1.2.1   open 介绍
1.2.2  更多选项
1.2.3   open 源码跟踪
1.2.4  如何选择文件描述符
1.2.5  文件描述符 fd 与文件管理结构 file
1.3   creat 简介
1.4  关闭文件
1.4.1   close 介绍
1.4.2   close 源码跟踪
1.4.3  自定义 files_operations
1.4.4  遗忘 close 造成的问题
1.4.5  如何查找文件资源泄漏
1.5  文件偏移
1.5.1   lseek 简介
1.5.2  小心 lseek 的返回值
1.5.3   lseek 源码分析
1.6  读取文件
1.6.1   read 源码跟踪
1.6.2  部分读取
1.7  写入文件
1.7.1   write 源码跟踪
1.7.2  追加写的实现
1.8  文件的原子读写
1.9  文件描述符的复制
1.10  文件数据的同步
1.11  文件的元数据
1.11.1  获取文件的元数据
1.11.2  内核如何维护文件的元数据
1.11.3  权限位解析
1.12  文件截断
1.12.1   truncate 与 ftruncate 的简单介绍
1.12.2  文件截断的内核实现
1.12.3  为什么需要文件截断
第 2 章 标准 I/O 库
2.1   stdin 、 stdout 和 stderr
2.2   I/O 缓存引出的趣题
2.3   fopen 和 open 标志位对比
2.4   fdopen 与 fileno
2.5  同时读写的痛苦
2.6   ferror 的返回值
2.7   clearerr 的用途
2.8  小心 fgetc 和 getc
2.9  注意 fread 和 fwrite 的返回值
2.10  创建临时文件
第 3 章 进程环境
3.1   main 是 C 程序的开始吗
3.2   “ 活雷锋 ”exit
3.3   atexit 介绍
3.3.1  使用 atexit
3.3.2   atexit 的局限性
3.3.3   atexit 的实现机制
3.4  小心使用环境变量
3.5  使用动态库
3.5.1  动态库与静态库
3.5.2  编译生成和使用动态库
3.5.3  程序的 “ 平滑无缝 ” 升级
3.6  避免内存问题
3.6.1  尴尬的 realloc
3.6.2  如何防止内存越界
3.6.3  如何定位内存问题
3.7   “ 长跳转 ”longjmp
3.7.1   setjmp 与 longjmp 的使用
3.7.2   “ 长跳转 ” 的实现机制
3.7.3   “ 长跳转 ” 的陷阱
第 4 章 进程控制:进程的一生
4.1  进程 ID
4.2  进程的层次
4.2.1  进程组
4.2.2  会话
4.3  进程的创建之 fork ()
4.3.1   fork 之后父子进程的内存关系
4.3.2   fork 之后父子进程与文件的关系
4.3.3  文件描述符复制的内核实现
4.4  进程的创建之 vfork ()
4.5   daemon 进程的创建
4.6  进程的终止
4.6.1   _exit 函数
4.6.2   exit 函数
4.6.3   return 退出
4.7  等待子进程
4.7.1  僵尸进程
4.7.2  等待子进程之 wait ()
4.7.3  等待子进程之 waitpid ()
4.7.4  等待子进程之等待状态值
4.7.5  等待子进程之 waitid ()
4.7.6  进程退出和等待的内核实现
4.8   exec 家族
4.8.1   execve 函数
4.8.2   exec 家族
4.8.3   execve 系统调用的内核实现
4.8.4   exec 与信号
4.8.5  执行 exec 之后进程继承的属性
4.9   system 函数
4.9.1   system 函数接口
4.9.2   system 函数与信号
4.10  总结
第 5 章 进程控制:状态、调度和优先级
5.1  进程的状态
5.1.1  进程状态概述
5.1.2  观察进程状态
5.2  进程调度概述
5.3  普通进程的优先级
5.4  完全公平调度的实现
5.4.1  时间片和虚拟运行时间
5.4.2  周期性调度任务
5.4.3  新进程的加入
5.4.4  睡眠进程醒来
5.4.5  唤醒抢占
5.5  普通进程的组调度
5.6  实时进程
5.6.1  实时调度策略和优先级
5.6.2  实时调度相关 API
5.6.3  限制实时进程运行时间
5.7   CPU 的亲和力
第 6 章 信号
6.1  信号的完整生命周期
6.2  信号的产生
6.2.1  硬件异常
6.2.2  终端相关的信号
6.2.3  软件事件相关的信号
6.3  信号的默认处理函数
6.4  信号的分类
6.5  传统信号的特点
6.5.1  信号的 ONESHOT 特性
6.5.2  信号执行时屏蔽自身的特性
6.5.3  信号中断系统调用的重启特性
6.6  信号的可靠性
6.6.1  信号的可靠性实验
6.6.2  信号可靠性差异的根源
6.7  信号的安装
6.8  信号的发送
6.8.1   kill 、 tkill 和 tgkill
6.8.2   raise 函数
6.8.3   sigqueue 函数
6.9  信号与线程的关系
6.9.1  线程之间共享信号处理函数
6.9.2  线程有独立的阻塞信号掩码
6.9.3  私有挂起信号和共享挂起信号
6.9.4  致命信号下,进程组全体退出
6.10  等待信号
6.10.1   pause 函数
6.10.2   sigsuspend 函数
6.10.3   sigwait 函数和 sigwaitinfo 函数
6.11  通过文件描述符来获取信号
6.12  信号递送的顺序
6.13  异步信号安全
6.14  总结
第 7 章 理解 Linux 线程( 1 )
7.1  线程与进程
7.2  进程 ID 和线程 ID
7.3   pthread 库接口介绍
7.4  线程的创建和标识
7.4.1   pthread_create 函数
7.4.2  线程 ID 及进程地址空间布局
7.4.3  线程创建的默认属性
7.5  线程的退出
7.6  线程的连接与分离
7.6.1  线程的连接
7.6.2  为什么要连接退出的线程
7.6.3  线程的分离
7.7  互斥量
7.7.1  为什么需要互斥量
7.7.2  互斥量的接口
7.7.3  临界区的大小
7.7.4  互斥量的性能
7.7.5  互斥锁的公平性
7.7.6  互斥锁的类型
7.7.7  死锁和活锁
7.8  读写锁
7.8.1  读写锁的接口
7.8.2  读写锁的竞争策略
7.8.3  读写锁总结
7.9  性能杀手:伪共享
7.10  条件等待
7.10.1  条件变量的创建和销毁
7.10.2  条件变量的使用
第 8 章 理解 Linux 线程( 2 )
8.1  线程取消
8.1.1  函数取消接口
8.1.2  线程清理函数
8.2  线程局部存储
8.2.1  使用 NPTL 库函数实现线程局部存储
8.2.2  使用 __thread 关键字实现线程局部存储
8.3  线程与信号
8.3.1  设置线程的信号掩码
8.3.2  向线程发送信号
8.3.3  多线程程序对信号的处理
8.4  多线程与 fork ()
第 9 章 进程间通信:管道
9.1  管道
9.1.1  管道概述
9.1.2  管道接口
9.1.3  关闭未使用的管道文件描述符
9.1.4  管道对应的内存区大小
9.1.5   shell 管道的实现
9.1.6  与 shell 命令进行通信( popen )
9.2  命名管道 FIFO
9.2.1  创建 FIFO 文件
9.2.2  打开 FIFO 文件
9.3  读写管道文件
9.4  使用管道通信的示例
第 10 章 进程间通信: System   V   IPC
10.1   System   V   IPC 概述
10.1.1  标识符与 IPC   Key
10.1.2   IPC 的公共数据结构
10.2   System   V 消息队列
10.2.1  创建或打开一个消息队列
10.2.2  发送消息
10.2.3  接收消息
10.2.4  控制消息队列
10.3   System   V 信号量
10.3.1  信号量概述
10.3.2  创建或打开信号量
10.3.3  操作信号量
10.3.4  信号量撤销值
10.3.5  控制信号量
10.4   System   V 共享内存
10.4.1  共享内存概述
10.4.2  创建或打开共享内存
10.4.3  使用共享内存
10.4.4  分离共享内存
10.4.5  控制共享内存
第 11 章 进程间通信: POSIX   IPC
11.1   POSIX   IPC 概述
11.1.1   IPC 对象的名字
11.1.2  创建或打开 IPC 对象
11.1.3  关闭和删除 IPC 对象
11.1.4  其他
11.2   POSIX 消息队列
11.2.1  消息队列的创建、打开、关闭及删除
11.2.2  消息队列的属性
11.2.3  消息的发送和接收
11.2.4  消息的通知
11.2.5   I/O 多路复用监控消息队列
11.3   POSIX 信号量
11.3.1  创建、打开、关闭和删除有名信号量
11.3.2  信号量的使用
11.3.3  无名信号量的创建和销毁
11.3.4  信号量与 futex
11.4  内存映射 mmap
11.4.1  内存映射概述
11.4.2  内存映射的相关接口
11.4.3  共享文件映射
11.4.4  私有文件映射
11.4.5  共享匿名映射
11.4.6  私有匿名映射
11.5   POSIX 共享内存
11.5.1  共享内存的创建、使用和删除
11.5.2  共享内存与 tmpfs
第 12 章 网络通信:连接的建立
12.1   socket 文件描述符
12.2  绑定 IP 地址
12.2.1   bind 的使用
12.2.2   bind 的源码分析
12.3  客户端连接过程
12.3.1   connect 的使用
12.3.2   connect 的源码分析
12.4  服务器端连接过程
12.4.1   listen 的使用
12.4.2   listen 的源码分析
12.4.3   accept 的使用
12.4.4   accept 的源码分析
12.5   TCP 三次握手的实现分析
12.5.1   SYN 包的发送
12.5.2  接收 SYN 包,发送 SYN ACK 包
12.5.3  接收 SYN ACK 数据包
12.5.4  接收 ACK 数据包,完成三次握手
第 13 章 网络通信:数据报文的发送
13.1  发送相关接口
13.2  数据包从用户空间到内核空间的流程
13.3   UDP 数据包的发送流程
13.4   TCP 数据包的发送流程
13.5   IP 数据包的发送流程
13.5.1   ip_send_skb 源码分析
13.5.2   ip_queue_xmit 源码分析
13.6  底层模块数据包的发送流程
第 14 章 网络通信:数据报文的接收
14.1  系统调用接口
14.2  数据包从内核空间到用户空间的流程
14.3   UDP 数据包的接收流程
14.4   TCP 数据包的接收流程
14.5   TCP 套接字的三个接收队列
14.6  从网卡到套接字
14.6.1  从硬中断到软中断
14.6.2  软中断处理
14.6.3  传递给协议栈流程
14.6.4   IP 协议处理流程
14.6.5  大师的错误?原始套接字的接收
14.6.6  注册传输层协议
14.6.7  确定 UDP 套接字
14.6.8  确定 TCP 套接字
第 15 章 编写安全无错代码
15.1  不要用 memcmp 比较结构体
15.2  有符号数和无符号数的移位区别
15.3  数组和指针
15.4  再论数组首地址
15.5   “ 神奇 ” 的整数类型转换
15.6  小心 volatile 的原子性误解
15.7  有趣的问题: “x==x” 何时为假?
15.8  小心浮点陷阱
15.8.1  浮点数的精度限制
15.8.2  两个特殊的浮点值
15.9   Intel 移位指令陷阱

实例下载地址

--Linux环境编程:从应用到内核 (Linux-Unix技术丛书)--高清完整标签带笔记版

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
;
报警