用计数的 Write 包装器与真实文件验证 BufWriter:10 万行无缓冲 writeln! 触发 511110 次底层 write(每行约 5 次),BufWriter 147 次,LineWriter 100000 次;100 万行耗时无缓冲约 8898 ms 对 BufWriter 30.9 ms;stdout 套 BufWriter 184.0 → 11.9 ms;process::exit 不 flush 丢了 3808 字节。
用 /dev/fd 与真实文件验证文件描述符:打开 +1、drop −1、编号被复用;不 drop 地打开到第 61438 次出现 Too many open files(os error 24);mem::forget 1000 次让 fd 数从 4 涨到 1004;try_clone / into_raw_fd / OwnedFd 与重复 close 返回 EBADF;子进程不继承 File 的 fd。
用真实路径验证 Path 与 PathBuf:parent/file_name/extension 对各种形状的结果;components 整理 // 与 ./ 但保留 ..;join 绝对路径丢掉前缀;按组件比较(/ab 不是 /a 的子路径);OsStr 装非 UTF-8 字节,to_str 返回 None,macOS 上创建这样的文件名失败(os error 92);canonicalize 解析 .. 与符号链接。
下载 memmap2 验证内存映射:读写与 flush;1 GiB 稀疏文件映射后 RSS 仅 2.0 MB,读遍所有页后 1026.0 MB(按页惰性加载);256 MiB 顺序求和 mmap 47.8 ms 对 read_to_end 65.8 ms;20 万次随机读 mmap 0.86 ms 对 seek+read 153.93 ms(约 179×);文件被截断后访问触发 SIGBUS。
用回环地址上的真实 TCP 验证 TcpListener 与 TcpStream:bind 端口 0、accept 与回显;ConnectionRefused(61)、AddrInUse(48)、读超时为 WouldBlock;字节流无消息边界(3 次 write 一次读到 12 字节);shutdown(Write) 与 read_to_end;set_nodelay 往返 44 → 18 µs。
用回环 TCP 与真实 libc poll 验证非阻塞 IO:WouldBlock 几微秒返回;等 300 ms 的数据,忙等循环 1,222,679 次烧 305.1 ms CPU,阻塞 read 0.2 ms,poll 0.0 ms;一个线程用 poll 按就绪顺序服务 3 个连接;非阻塞标志被 try_clone 的克隆共享。
用回环地址验证 UdpSocket:数据报保留边界;缓冲区太小静默截断;macOS 上最大数据报 9216 字节(超过 os error 40);对死端口 send_to 成功、connect 后 recv 得 ConnectionRefused;快速发 20000 个数据报只收到 762 个(丢 96.2%)。
用 TcpStream 手写 HTTP/1.1 对独立实现的服务端(Python http.server)和 curl 验证:请求与响应的原始字节、状态行与头部解析(Content-Length 是字节数、同名头可重复)、无长度时读到 EOF、chunked 分块的原始格式与手写解码、Keep-Alive 复用连接 104 对 149 µs/请求、302 与 curl -L。
下载 tokio 写一个回显服务并与线程版对比:io::copy 回显;tokio 保持 3000 个连接只用 5 个线程、5 MB;每连接一线程的版本在 1507 个连接处失败并用到 1509 个线程、29 MB;单连接往返延迟 tokio 22.9 µs 对线程 20.3 µs。
用标准库的 TcpListener 写一个约 60 行的 HTTP/1.1 服务端并用 curl 验证:GET/HEAD/POST/DELETE 与 404、405;头部转小写;keep-alive 复用连接;畸形请求得 400/431;读超时;20 个并发请求计数不丢更新。
用 std::os::unix::net 验证 Unix 域套接字:bind 创建 socket 类型文件(权限 755);残留文件使 bind 得 AddrInUse(48)、connect 得 ConnectionRefused(61);路径最长 103 字节;UnixStream::pair 与 UnixDatagram;往返延迟 4.7 对 TCP 17.2 µs,但吞吐 1.76 对 3.94 GB/s(TCP 更高)。
用 libc 的 sigaction 与真实进程验证信号处理:默认 SIGTERM 终止进程且不运行 Drop(退出码 -15);安装处理函数设置原子标志后主循环正常退出,Drop 运行、退出码 0;阻塞期间的 100 个 SIGUSR1 合并成 1 次;SIGKILL 不能被捕获(EINVAL);Rust 运行时已把 SIGPIPE 设为忽略。