Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

在用libuv 在读取文件内容时采用 uv_fs_read , 但一直不明白怎么用。看代码。

$
0
0
// 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
};

Viewing all articles
Browse latest Browse all 14821

Trending Articles