As promised, one of the neat features of std.Io is that it makes it nice to debug resource leaks such as file descriptors. Here is a proof-of-concept of this working:
Demo
conststd=@import("std");constIo=std.Io;pubfnmain(init:std.process.Init)!void{constio=init.io;constargs=tryinit.minimal.args.toSlice(init.arena.allocator());for(args[1..])|arg|{constfile=tryIo.Dir.cwd().openFile(io,arg,.{});_=file;}}
$ zig run test.zig -- hello.zig windows_h.zig
error: file handle 3 leaked:
/home/andy/src/zig/lib/std/Io/Dir.zig:508:33: 0x10cd890 in openFile (std.zig)
return io.vtable.dirOpenFile(io.userdata, dir, sub_path, flags);
^
/home/andy/src/zig/build-release/test.zig:9:47: 0x11ae0f5 in main (test.zig)
const file = try Io.Dir.cwd().openFile(io, arg, .{});
^
/home/andy/src/zig/lib/std/start.zig:714:30: 0x11aebe6 in callMain (std.zig)
return wrapMain(root.main(.{
^
/home/andy/src/zig/lib/std/start.zig:190:5: 0x11ade51 in _start (std.zig)
asm volatile (switch (native_arch) {
^
???:?:?: 0x0 in ??? (???)
???:?:?: 0x0 in ??? (???)
error: file handle 4 leaked:
/home/andy/src/zig/lib/std/Io/Dir.zig:508:33: 0x10cd890 in openFile (std.zig)
return io.vtable.dirOpenFile(io.userdata, dir, sub_path, flags);
^
/home/andy/src/zig/build-release/test.zig:9:47: 0x11ae0f5 in main (test.zig)
const file = try Io.Dir.cwd().openFile(io, arg, .{});
^
/home/andy/src/zig/lib/std/start.zig:714:30: 0x11aebe6 in callMain (std.zig)
return wrapMain(root.main(.{
^
/home/andy/src/zig/lib/std/start.zig:190:5: 0x11ade51 in _start (std.zig)
asm volatile (switch (native_arch) {
^
???:?:?: 0x0 in ??? (???)
???:?:?: 0x0 in ??? (???)
As promised, one of the neat features of `std.Io` is that it makes it nice to debug resource leaks such as file descriptors. Here is a proof-of-concept of this working:
## Demo
```zig
const std = @import("std");
const Io = std.Io;
pub fn main(init: std.process.Init) !void {
const io = init.io;
const args = try init.minimal.args.toSlice(init.arena.allocator());
for (args[1..]) |arg| {
const file = try Io.Dir.cwd().openFile(io, arg, .{});
_ = file;
}
}
```
```
$ zig run test.zig -- hello.zig windows_h.zig
error: file handle 3 leaked:
/home/andy/src/zig/lib/std/Io/Dir.zig:508:33: 0x10cd890 in openFile (std.zig)
return io.vtable.dirOpenFile(io.userdata, dir, sub_path, flags);
^
/home/andy/src/zig/build-release/test.zig:9:47: 0x11ae0f5 in main (test.zig)
const file = try Io.Dir.cwd().openFile(io, arg, .{});
^
/home/andy/src/zig/lib/std/start.zig:714:30: 0x11aebe6 in callMain (std.zig)
return wrapMain(root.main(.{
^
/home/andy/src/zig/lib/std/start.zig:190:5: 0x11ade51 in _start (std.zig)
asm volatile (switch (native_arch) {
^
???:?:?: 0x0 in ??? (???)
???:?:?: 0x0 in ??? (???)
error: file handle 4 leaked:
/home/andy/src/zig/lib/std/Io/Dir.zig:508:33: 0x10cd890 in openFile (std.zig)
return io.vtable.dirOpenFile(io.userdata, dir, sub_path, flags);
^
/home/andy/src/zig/build-release/test.zig:9:47: 0x11ae0f5 in main (test.zig)
const file = try Io.Dir.cwd().openFile(io, arg, .{});
^
/home/andy/src/zig/lib/std/start.zig:714:30: 0x11aebe6 in callMain (std.zig)
return wrapMain(root.main(.{
^
/home/andy/src/zig/lib/std/start.zig:190:5: 0x11ade51 in _start (std.zig)
asm volatile (switch (native_arch) {
^
???:?:?: 0x0 in ??? (???)
???:?:?: 0x0 in ??? (???)
```