如何在 libuv 中进行文件的异步 I/O 操作:
#include <uv.h>
#include <stdio.h>
uv_loop_t *loop;
uv_fs_t read_req;
uv_buf_t buffer;
void on_read(uv_fs_t *req) {
if (req->result < 0) {
fprintf(stderr, "读取文件错误: %s\n", uv_strerror(req->result));
} else if (req->result == 0) {
// 文件读取完毕
printf("文件读取完成\n");
} else {
// 处理读取到的数据
printf("读取到的数据: %.*s", req->result, buffer.base);
// 继续读取文件内容
uv_fs_read(loop, &read_req, req->file, &buffer, 1, -1, NULL);
}
}
int main() {
loop = uv_default_loop();
const char *filename = "example.txt";
int file = uv_fs_open(loop, &read_req, filename, O_RDONLY, 0, NULL);
if (file < 0) {
fprintf(stderr, "打开文件错误: %s\n", uv_strerror(file));
return 1;
}
buffer = uv_buf_init((char*)malloc(1024), 1024);
// 开始异步读取文件
uv_fs_read(loop, &read_req, file, &buffer, 1, -1, on_read);
// 启动事件循环
uv_run(loop, UV_RUN_DEFAULT);
// 释放资源
uv_fs_req_cleanup(&read_req);
free(buffer.base);
return 0;
}
上述代码演示了如何异步读取文件内容。对于文件的写入,你可以使用类似的方式,使用 uv_fs_write 函数进行异步写入。