读取文件和 stdin
将输入流式传入程序
读取文件和 stdin 是 CoddyKit 上的免费 Zig Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Zig Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Zig Academy 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Tools Consume Input
A useful CLI usually reads something: a file you name, or text piped into it. Zig gives you clear, explicit ways to do both. 📥
Open a File by Path
Use std.fs.cwd to get the current directory, then openFile to open a path relative to it for reading.
const file = try std.fs.cwd().openFile(path, .{});Always Close What You Open
An open file is a resource you own. Pair the open with a defer file.close() so it is released no matter how the function exits.
defer file.close();Read the Whole File
To slurp everything at once, call readToEndAlloc with an allocator and a size limit. It returns the bytes as an owned slice.
const data = try file.readToEndAlloc(a, 1024 * 1024);Free the Bytes Later
That returned slice lives on the heap, so you own it. Add defer a.free(data) to release the buffer when you are done with it.
defer a.free(data);The Size Limit Is a Guard
That max-bytes argument protects you from a huge file eating all memory. Pick a limit that fits your tool's realistic input.
Grab Standard Input
To read piped text, reach for std.io.getStdIn. It hands back a file just like one you opened, so the same reading calls apply.
const stdin = std.io.getStdIn();Read All of stdin
Ask stdin for a reader and call readAllAlloc. This collects everything piped in until end-of-input into one owned slice.
const input = try stdin.reader().readAllAlloc(a, 1024 * 1024);Read Line by Line
For streaming work, a reader's readUntilDelimiterOrEof pulls one line at a time into a buffer, returning null when input ends.
const line = try r.readUntilDelimiterOrEof(&buf, '\n');Buffer for Speed
Each raw read can be a system call. Wrap a reader in std.io.bufferedReader so many small reads batch into fewer, faster operations.
var br = std.io.bufferedReader(file.reader());File or Pipe, Same Code
Because a file and stdin both expose a reader, your parsing logic does not care which one it got. That is clean, reusable design. ✨
Quick Check
Recall how you turn a file's bytes into something you can use.
Recap
You opened files with openFile, read them fully or line by line, pulled text from stdin, and freed every buffer. Input handled. 🎯
常见问题解答
「读取文件和 stdin」课时是免费的吗?
是的 — 「读取文件和 stdin」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Zig Academy 课程的其余内容,请升级到 CoddyKit PRO。 Zig Academy 课程共包含 4 节课。
「读取文件和 stdin」这节课中我会学到什么?
将输入流式传入程序 你通过在浏览器中直接运行的动手代码来练习 Zig Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Zig Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Zig Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「读取文件和 stdin」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Zig Academy 课中编写并运行代码吗?
能。每节 Zig Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 读取命令行参数
- 读取文件和 stdin
- 写入输出与退出代码
- 打包并发布二进制文件