← 完整学习路线

UNIT 37 / 78 · W05-1

跨过 C++ 与操作系统的接口

本单元预计 4 核心小时。可以分成多个学习时段,按完整小节推进;停下来时留下输入、命令、结果和下一步。

时间包含阅读、编码与检查,是学习预算而非期限。打开此页只保存阅读位置,不代表通过验收。

开始本单元前

SYS-00完整先备 →
完整G0后先完成前一SYS-00单元,再进入进程/fd与虚拟内存。

01 / READ

先知道自己在观察什么

进程、系统调用与文件描述符 →

把 read 的正数、零、负数和 pipe 的 EOF 条件列成表;再读进程与 fd 的区别。

先备不清楚时,沿章节入口补读;不要依赖翻过页数判断进度。

02 / PREDICT & RUN

先留下自己的预测或独立尝试

先数六个字节和两字节窗口,预测累计内容与三次成功读取,再运行观察 EOF。

用两个字节的窗口读六个字节 →
源码下载与编译入口

下载到自己的练习目录。按本节给出的完整命令编译;多文件与driver要求见原任务。需要时查阅文件保存与编译操作 →

19-a.cpp

先保存预测,再核对正文标明的预期或诊断。完整构建、多文件与设备实验按原任务命令执行。

03 / CHANGE ONE THING

通过一个变动看清原因

把副本读窗口从2改为4,输入仍为已经完整写入的abcdef;同步将末尾成功读取次数检查chunks!=3改为chunks!=2,保留字节内容与EOF检查。

修改后应观察到什么

累计内容仍为 abcdef;此受控例中成功读取为两次,不能推广成一般并发消息边界。

04 / DO IT YOURSELF

换一组条件,独立解决

写一个小型 pipe 字节传递练习,分别传空内容与 hi;关闭不用的端点,循环按实际 read 数量追加。

用这些条件检查自己的实现

  • 空内容在所有写端关闭后读到 EOF;hi 被完整保留。
  • 读取计数不当消息数量;失败检查区分 EINTR 与其他错误。
05 / EXPLAIN & CHECK

用证据决定是否进入下一单元

  1. 文件名、fd 与打开文件状态有什么区别?
  2. 为什么某个多余写端会让 EOF 永远不到?

本单元的验收依据

空与短输入的字节、结束条件均通过;画出每个 fd 的关闭责任,不启动第二个长期项目。

留下自己的代码或推演、测试输入、真实输出和仍不确定的问题。未达到要求时,下一次继续本单元。