searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

如何在 libuv 中进行文件的异步 I/O 操作

2023-12-05 06:46:14
12
0

如何在 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 函数进行异步写入。

0条评论
作者已关闭评论
翁****东
8文章数
0粉丝数
翁****东
8 文章 | 0 粉丝
原创

如何在 libuv 中进行文件的异步 I/O 操作

2023-12-05 06:46:14
12
0

如何在 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 函数进行异步写入。

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0