Back to COMP1521 Overview 返回 COMP1521 总览
Week 9 · Unix Files & Storage Interfaces 第 9 周 · Unix 文件与存储接口

From Descriptors to Directories 掌握文件描述符到目录遍历的全链路

System call pipelines, metadata, hard/soft links, and directory walking aligned with lab & exam scenarios 系统调用流程、元数据、硬/软链接与目录遍历,紧贴实验与考试题型

🎯 Learning Objectives学习目标

🧭 Exam Alignment考试对齐

Coverage goals: assemble ≥3 file-descriptor diagrams, catalogue metadata fields, and document at least two directory traversal patterns with cycle guards. 覆盖目标:绘制 ≥3 个文件描述符示意,整理关键元数据字段,并记录至少两种带循环防护的目录遍历模式。

📚 Core Concepts核心概念

File Descriptor Basics文件描述符基础

Descriptors are integers indexing kernel file tables. 0/1/2 map to stdin/stdout/stderr. Duplication via dup2 enables redirection.描述符是索引内核文件表的整数。0/1/2 对应标准输入/输出/错误。通过 dup2 可实现重定向。

Low-level System Calls底层系统调用

open returns descriptor; read/write transfer bytes; close releases kernel resources. Always check return values.open 返回描述符;read/write 传输字节;close 释放资源。必须检查返回值。

Metadata & Permissions元数据与权限

stat reveals size, ownership, timestamps, mode bits, link count, and device IDs. Understand octal permissions and special bits (setuid, sticky).stat 展示大小、所有者、时间戳、模式位、链接数与设备号。需掌握八进制权限及特殊位(setuid、sticky)。

Directory Traversal目录遍历

Use opendir/readdir/closedir or ftw. Skip “.” and “..”, detect cycles via inode+device pairs.通过 opendir/readdir/closedirftw 遍历目录。忽略 “.” 和 “..”,并用 inode+device 组合检测循环。

Streams vs Syscalls流式 I/O 与系统调用

stdio buffers data for convenience; mixing stdio with raw descriptors requires flush/sync steps to stay consistent.stdio 为方便会缓存数据;在 stdio 与底层描述符混用时需刷新/同步以保持一致。

🧪 Worked Examples示例串讲

Example 1 — Implementing tee with dup2示例 1 — 使用 dup2 实现 tee

Duplicate stdout into a log file while still printing to terminal. Use dup2(log_fd, STDOUT_FILENO) after opening file.将 stdout 复制到日志文件同时输出终端。打开文件后执行 dup2(log_fd, STDOUT_FILENO)

Remember to save original stdout via dup if you need to restore later.如需恢复标准输出,先用 dup 备份原 stdout。

Example 2 — Summarising metadata from stat示例 2 — stat 元数据摘要

Collect size, mode, UID/GID, link count, and modification time; format as table for Lab09 «stat_report».收集文件大小、模式、UID/GID、链接数与修改时间,并以表格展示,配合 Lab09 “stat_report”。

⚠️ Common Pitfalls易错点

🛠️ Practice Task实践任务

Build fs_inspector.c: recursively scan a directory tree, print metadata summary, detect cycles, and optionally copy regular files to a backup location.实现 fs_inspector.c:递归扫描目录树,输出元数据摘要,检测循环,并可选复制常规文件至备份目录。

🧪 Tutorial & Lab Mapping教程与实验映射

Tutorial 09 HighlightsTutorial 09 精要

  • Descriptor duplication puzzles (dup2 behaviour).描述符复制谜题(dup2 行为)。
  • Permission matrix exercises translating mode bits to human-readable form.权限矩阵练习,将模式位转换为人类可读形式。
  • Link-count reasoning with rename/unlink scenarios.通过 rename/unlink 场景推理链接计数。

Lab 09 Programming TasksLab 09 编程任务

  • filecopy.c — robust copy using read/write loops.filecopy.c — 使用 read/write 循环完成稳健复制。
  • stat_report.c — summarise metadata for list of files.stat_report.c — 输出文件元数据汇总。
  • link_mirror.c — replicate directory tree using hard links.link_mirror.c — 使用硬链接镜像目录树。
  • walk_fs.c (challenge) — recursive walker with cycle detection.walk_fs.c(挑战) — 带循环检测的递归遍历器。

📝 Study Log学习记录

Premium Quiz — 40 Questions on Unix FilesPremium 测验 — 40 道 Unix 文件题

28 basic (syscalls, metadata) · 8 intermediate (directory walking) · 4 advanced (link semantics & streaming design)基础28题(系统调用/元数据)· 中级8题(目录遍历)· 高级4题(链接语义与流式设计)

🔒 Open Week 9 Quiz (Premium) 打开第 9 周测验(会员)

🔭 Next Week Preview下周预告

Week 10 shifts to numeric representations and encoding (floating point & Unicode). Preview floating_point.pdf and unicode.pdf.第10周转向数值表示与编码(浮点与 Unicode)。请预习 floating_point.pdfunicode.pdf

📎 Resources & Checklist资源与检查表