chore: 将所有外部图片本地化到仓库

- 下载 110 张外部图片到根目录 images/ 文件夹
- 更新所有 README.md 中的图片引用为统一路径 images/xxx.png
- 55 张图片成功下载(PNG 格式)
- 55 张失效图片创建占位文件(SVG/PNG)
- 移除所有外部图片链接依赖

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
riba2534
2026-01-05 16:34:13 +08:00
parent d44ecdf807
commit 0d17c981ee
128 changed files with 691 additions and 232 deletions

View File

@@ -22,11 +22,11 @@ I/O 复用技术可以解决这个问题。
上述两种方法的内容完全一致。可以用纸电话模型做一个类比:
![](https://s2.ax1x.com/2019/01/23/kA8H81.png)
![](images/kA8H81.png)
上图是一个纸杯电话系统,为了使得三人同时通话,说话时要同时对着两个纸杯,接听时也需要耳朵同时对准两个纸杯。为了完成 3 人通话,可以进行如下图的改进:
![](https://s2.ax1x.com/2019/01/23/kA8bgx.png)
![](images/kA8bgx.png)
如图做出改进,就是引入了复用技术。
@@ -45,11 +45,11 @@ I/O 复用技术可以解决这个问题。
纸杯电话系统引入复用技术之后可以减少纸杯数量和连线长度。服务器端引入复用技术可以减少所需进程数。下图是多进程服务端的模型:
![](https://s2.ax1x.com/2019/01/23/kAGBM6.png)
![](images/kAGBM6.png)
下图是引入复用技术之后的模型:
![](https://s2.ax1x.com/2019/01/23/kAGrqO.png)
![](images/kAGrqO.png)
从图上可以看出,引入复用技术之后,可以减少进程数。重要的是,无论连接多少客户端,提供服务的进程只有一个。
@@ -69,7 +69,7 @@ select 函数是最具代表性的实现复用服务器的方法。在 Windows
select 函数的使用方法与一般函数的区别并不大,更准确的说,他很难使用。但是为了实现 I/O 复用服务器端,我们应该掌握 select 函数并运用于套接字编程当中。认为「select 函数是 I/O 复用的全部内容」也并不为过。select 函数的调用过程如下图所示:
![](https://s2.ax1x.com/2019/01/23/kAtdRs.png)
![](images/kAtdRs.png)
#### 12.2.2 设置文件描述符
@@ -77,7 +77,7 @@ select 函数的使用方法与一般函数的区别并不大,更准确的说
利用 fd_set 数组变量执行此操作如图所示该数组是存有0和1的位数组。
![](https://s2.ax1x.com/2019/01/23/kAt2i4.png)
![](images/kAt2i4.png)
图中最左端的位表示文件描述符 0所在位置。如果该位设置为 1则表示该文件描述符是监视对象。那么图中哪些文件描述符是监视对象呢很明显是描述符 1 和 3。在 fd_set 变量中注册或更改值的操作都由下列宏完成。
@@ -88,7 +88,7 @@ select 函数的使用方法与一般函数的区别并不大,更准确的说
上述函数中FD_ISSET 用于验证 select 函数的调用结果,通过下图解释这些函数的功能:
![](https://s2.ax1x.com/2019/01/23/kANR78.png)
![](images/kANR78.png)
#### 12.2.3 设置检查(监视)范围及超时
@@ -134,7 +134,7 @@ struct timeval
select 返回正整数时,怎样获知哪些文件描述符发生了变化?向 select 函数的第二到第四个参数传递的 fd_set 变量中将产生如图所示的变化:
![](https://s2.ax1x.com/2019/01/23/kA06dx.png)
![](images/kA06dx.png)
由图可知select 函数调用完成后,向其传递的 fd_set 变量将发生变化。原来为 1 的所有位将变成 0但是发生了变化的文件描述符除外。因此可以认为值仍为 1 的位置上的文件描述符发生了变化。
@@ -153,7 +153,7 @@ gcc select.c -o select
结果:
![](https://s2.ax1x.com/2019/01/23/kAjgW6.png)
![](images/kAjgW6.png)
可以看出,如果运行后在标准输入流输入数据,就会在标准输出流输出数据,但是如果 5 秒没有输入数据,就提示超时。
@@ -172,7 +172,7 @@ gcc echo_selectserv.c -o selserv
结果:
![](https://s2.ax1x.com/2019/01/23/kEkV8H.png)
![](images/kEkV8H.png)
从图上可以看出,虽然只用了一个进程,但是却实现了可以和多个客户端进行通信,这都是利用了 select 的特点。