Warning: Due to various recent migrations, viewing non-HEAD refs may be broken.
/cmd/read_file/main.ha (raw)
use aio;
use fmt;
use io;
use os;
let buf32: [32]u8 = [0...];
let buf: []u8 = buf32[..];
let ofs: size = 0;
export fn main() void = {
let loop = aio::loop_new()!;
let file = os::open("main.ha")!;
aio::op_read(&loop, file, buf, ofs, &on_read, null, aio::submission_flags::NONE)!;
aio::loop_submit(&loop)!;
aio::loop_run(&loop);
// loop_finish(&loop);
};
fn on_read(
loop: *aio::loop,
file: io::file,
r: (size | io::EOF | io::error),
flags: aio::completion_flags,
user: nullable *opaque,
) void = {
match (r) {
case io::EOF => abort("EOF");
case io::error => abort(io::strerror(r as io::error));
case size => void;
};
io::write(os::stdout, buf[.. r as size])!;
ofs += r as size;
aio::op_read(loop, file, buf, ofs, &on_read, null, aio::submission_flags::NONE)!; // TODO: use multishot instead? or does that not work for files
aio::loop_submit(loop)!;
};