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

@@ -52,7 +52,7 @@ gcc sep_serv.c -o serv
结果:
![](https://i.loli.net/2019/01/30/5c512086a75d9.png)
![](images/5c512086a75d9.png)
从运行结果可以看出,服务端最终没有收到客户端发送的信息。那么这是什么原因呢?
@@ -64,15 +64,15 @@ gcc sep_serv.c -o serv
下面的图描述的是服务端代码中的两个FILE 指针、文件描述符和套接字中的关系。
![](https://i.loli.net/2019/01/30/5c5121da89955.png)
![](images/5c5121da89955.png)
从图中可以看到,两个指针都是基于同一文件描述符创建的。因此,针对于任何一个 FILE 指针调用 fclose 函数都会关闭文件描述符,如图所示:
![](https://i.loli.net/2019/01/30/5c51224051802.png)
![](images/5c51224051802.png)
从图中看到,销毁套接字时再也无法进行数据交换。那如何进入可以进入但是无法输出的半关闭状态呢?如下图所示:
![](https://i.loli.net/2019/01/30/5c5122a45c5f1.png)
![](images/5c5122a45c5f1.png)
只需要创建 FILE 指针前先复制文件描述符即可。复制后另外创建一个文件描述符,然后利用各自的文件描述符生成读模式的 FILE 指针和写模式的 FILE 指针。这就为半关闭创造好了环境,因为套接字和文件描述符具有如下关系:
@@ -80,7 +80,7 @@ gcc sep_serv.c -o serv
也就是说,针对写模式 FILE 指针调用 fclose 函数时,只能销毁与该 FILE 指针相关的文件描述符,无法销毁套接字,如下图:
![](https://i.loli.net/2019/01/30/5c5123ad7df31.png)
![](images/5c5123ad7df31.png)
那么调用 fclose 函数后还剩下 1 个文件描述符,因此没有销毁套接字。那此时的状态是否为半关闭状态?不是!只是准备好了进入半关闭状态,而不是已经进入了半关闭状态。仔细观察,还剩下一个文件描述符。而该文件描述符可以同时进行 I/O。因此不但没有发送 EOF而且仍然可以利用文件描述符进行输出。
@@ -88,7 +88,7 @@ gcc sep_serv.c -o serv
与调用 fork 函数不同,调用 fork 函数将复制整个进程,此处讨论的是同一进程内完成对文件描述符的复制。如图:
![](https://i.loli.net/2019/01/30/5c512579c45b6.png)
![](images/5c512579c45b6.png)
复制完成后,两个文件描述符都可以访问文件,但是编号不同。
@@ -147,7 +147,7 @@ gcc dup.c -o dup
结果:
![](https://i.loli.net/2019/01/30/5c5135574d89a.png)
![](images/5c5135574d89a.png)
#### 16.2.4 复制文件描述符后「流」的分离
@@ -159,7 +159,7 @@ gcc dup.c -o dup
这个代码可以与 [sep_clnt.c](https://github.com/riba2534/TCP-IP-NetworkNote/blob/master/ch16/sep_clnt.c) 配合起来使用,编译过程和上面一样,运行结果为:
![](https://i.loli.net/2019/01/30/5c513d54a27e0.png)
![](images/5c513d54a27e0.png)
### 16.3 习题