3. 详细解释文件内容
A. 基础 C 语言训练 Lab 1 & 2
convert.c
功能: 整数进制转换。
亮点: 使用位操作 (x >> i) & 1 获取二进制位,并手动处理每4位的空格格式化。
twecho.c
功能: 双重回显 (Two Echoes)。
逻辑: 使用 malloc 分配指针数组 (char**),深拷贝每个字符串并大写转换。关键点在于复杂的内存清理逻辑。
isort.c
功能: 插入排序演示。
逻辑: 动态分配数组,填充随机数,排序。演示了指针如何作为迭代器使用。
B. 通用链表库 核心基石 Lab 3
mylist.h / mylist.c
这是整个课程的基础设施。它模拟了 C++ STL list 的功能,但是用 C 实现的。
void *data: 泛型指针,让链表可以存任何东西。traverseList: 接收函数指针回调,体现了多态思想。addFront,popFront,removeAllNodes: 标准链表操作。
revecho.c
使用 struct List 存储命令行参数,演示链表的实际应用。
C. 数据库工具 Lab 4 & 5
mdb.h / mdb-lookup.c
功能: 简单的数据库查询工具。
流程: fopen -> fread (加载到链表) -> strstr (在链表中搜索) -> 输出。
mdb-add.c
功能: 追加记录。使用 "ab" (Append Binary) 模式打开文件。
D. 网络编程 进阶核心 Lab 6 & 7
mdb-lookup-server.c (Server)
将单机版的 mdb-lookup 变为网络服务。
- Socket 流程:
socket->bind->listen->accept。 - 关键技巧: 使用
fdopen将 Socket 描述符包装成FILE*,从而可以使用fgets等高级 I/O 函数。 - 模型: 迭代式服务器 (Iterative),一次处理一个连接。
http-client.c (Client)
手动构造 HTTP 请求包:GET /path HTTP/1.0\r\nHost:...\r\n\r\n。难点在于解析响应,找到 Head 和 Body 的分界线。
http-server.c
静态文件服务器 + 反向代理。根据 URL 判断是读取文件还是转发请求给后端数据库服务器。
E. C++ 面向对象 Lab 8-10
twecho2.cpp: 引入 Class 和 RAII (资源获取即初始化),自动管理内存。
mystring.cpp: 实现 Rule of Three (析构、拷贝构造、赋值),深入理解 C++ 内存管理。
tlist.h: 引入模板 (Templates),实现类型安全的通用容器。