Skip to content

Instantly share code, notes, and snippets.

@habedi
Created May 5, 2026 18:41
Show Gist options
  • Select an option

  • Save habedi/a20873e5afee3a4a730a724a3e3a611a to your computer and use it in GitHub Desktop.

Select an option

Save habedi/a20873e5afee3a4a730a724a3e3a611a to your computer and use it in GitHub Desktop.
Example code showing the behavior of `std.Io.File.Reader.atEnd`
const std = @import("std");
pub fn main(init: std.process.Init) !void {
const io = init.io;
const cwd = std.Io.Dir.cwd();
// Create a test file
{
const f = try cwd.createFile(io, "demo.txt", .{});
defer f.close(io);
_ = try f.writePositionalAll(io, "hello", 0);
}
defer cwd.deleteFile(io, "demo.txt") catch {};
var file = try cwd.openFile(io, "demo.txt", .{});
defer file.close(io);
var buf: [16]u8 = undefined;
var file_reader = file.reader(io, &buf);
// 1. Fresh reader: size is null → atEnd false (unknown case)
std.debug.print("fresh: atEnd = {}\n", .{file_reader.atEnd()});
// 2. Populate size via getSize, pos still 0 → atEnd false (genuinely not at end)
_ = try file_reader.getSize();
std.debug.print("after getSize: atEnd = {}\n", .{file_reader.atEnd()});
// 3. Drain the file → pos == size → atEnd true
var dump: [16]u8 = undefined;
const n = try file_reader.interface.readSliceShort(&dump);
std.debug.print("read {} bytes: atEnd = {}\n", .{ n, file_reader.atEnd() });
}
// ~/.local/share/zig/0.16.0/zig run reader_atEnd.zig
// Output:
// fresh: atEnd = false
// after getSize: atEnd = false
// read 5 bytes: atEnd = true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment