// BIO mode
void main()
{
fd = open(path, ...);
while (read(fd, ...) != 0) {
write(STDOUT_FILENO, ...);
}
close(fd);
}
// libuv AIO mode
void main()
{
fd = uv_fs_open(&open_req, path, ..., open_cb);
uv_run(...);
}
void open_cb(uv_fs_t *req) {
uv_fs_read(req->result, ..., read_cb);
}
void read_cb(uv_fs_t *req) {
if (req->result > 0) {
uv_fs_write(STDOUT_FILENO, ..., write_cb); //这地方不能白,为什么还要write 直接取出buf,由业务处理就行了。
} else if (req->result == 0) {
uv_fs_close(open_req.result, NULL);
}
}
void write_cb(uv_fs_t *req) {
uv_fs_read(open_req.result, ..., read_cb); //为什么还要read_cb ????
}
例子中根本没有看到读出来的内容。我查了uv_fs_t 的定义:
struct uv_fs_s {
UV_REQ_FIELDS
uv_fs_type fs_type;
uv_loop_t* loop;
uv_fs_cb cb;
ssize_t result;
void* ptr;
const char* path;
uv_stat_t statbuf; /* Stores the result of uv_fs_stat() and uv_fs_fstat(). */
UV_FS_PRIVATE_FIELDS
};