Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <uv.h>
- static int bufsize = 1000;
- typedef struct {
- uv_fs_t req;
- uv_file fd;
- uv_buf_t buf;
- } fs_req_t;
- void after_fs_read(uv_fs_t *req);
- void after_fs_write(uv_fs_t *req) {
- fs_req_t *wr = (fs_req_t*) req;
- if (req->result < 0) {
- fprintf(stderr, "Write error: %s\n", uv_strerror(req->result));
- } else {
- fs_req_t* rr = (fs_req_t *) malloc(sizeof(fs_req_t));
- rr->fd = wr->fd;
- rr->buf = uv_buf_init((char *) malloc(bufsize), bufsize);
- uv_fs_read(uv_default_loop(), &rr->req, rr->fd, rr->buf.base, rr->buf.len, -1, after_fs_read);
- }
- uv_fs_req_cleanup(&wr->req);
- free(wr->buf.base);
- free(wr);
- }
- void after_fs_read(uv_fs_t *req) {
- fs_req_t *rr = (fs_req_t*) req;
- if (req->result < 0) {
- fprintf(stderr, "Read error: %s\n", uv_strerror(req->result));
- } else if (req->result == 0) {
- uv_fs_t close_req;
- // synchronous
- uv_fs_close(uv_default_loop(), &close_req, rr->fd, NULL);
- } else {
- fs_req_t* wr = (fs_req_t *) malloc(sizeof(fs_req_t));
- wr->fd = rr->fd;
- wr->buf = rr->buf;
- uv_fs_write(uv_default_loop(), &wr->req, 1, wr->buf.base, rr->req.result, -1, after_fs_write);
- }
- uv_fs_req_cleanup(&rr->req);
- free(rr);
- }
- void after_fs_open(uv_fs_t *req) {
- if (req->result < 0) {
- fprintf(stderr, "error opening file: %d\n", uv_strerror(req->result));
- } else {
- fs_req_t *rr = (fs_req_t *) malloc(sizeof(fs_req_t));
- rr->fd = req->result;
- rr->buf = uv_buf_init((char *) malloc(bufsize), bufsize);
- uv_fs_read(uv_default_loop(), &rr->req, rr->fd, rr->buf.base, rr->buf.len, -1, after_fs_read);
- }
- uv_fs_req_cleanup(req);
- }
- int main(int argc, char **argv) {
- uv_fs_t open_req;
- uv_fs_open(uv_default_loop(), &open_req, argv[1], O_RDONLY, 0, after_fs_open);
- return uv_run(uv_default_loop(), UV_RUN_DEFAULT);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement