Advertisement
NickG

Untitled

Sep 10th, 2013
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.81 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <uv.h>
  4.  
  5. static int bufsize = 1000;
  6.  
  7. typedef struct {
  8.     uv_fs_t req;
  9.     uv_file fd;
  10.     uv_buf_t buf;
  11. } fs_req_t;
  12.  
  13. void after_fs_read(uv_fs_t *req);
  14.  
  15. void after_fs_write(uv_fs_t *req) {
  16.     fs_req_t *wr = (fs_req_t*) req;
  17.     if (req->result < 0) {
  18.         fprintf(stderr, "Write error: %s\n", uv_strerror(req->result));
  19.     } else {
  20.         fs_req_t* rr = (fs_req_t *) malloc(sizeof(fs_req_t));
  21.         rr->fd = wr->fd;
  22.         rr->buf = uv_buf_init((char *) malloc(bufsize), bufsize);
  23.         uv_fs_read(uv_default_loop(), &rr->req, rr->fd, rr->buf.base, rr->buf.len, -1, after_fs_read);
  24.     }
  25.     uv_fs_req_cleanup(&wr->req);
  26.     free(wr->buf.base);
  27.     free(wr);
  28. }
  29.  
  30. void after_fs_read(uv_fs_t *req) {
  31.     fs_req_t *rr = (fs_req_t*) req;
  32.     if (req->result < 0) {
  33.         fprintf(stderr, "Read error: %s\n", uv_strerror(req->result));
  34.     } else if (req->result == 0) {
  35.         uv_fs_t close_req;
  36.         // synchronous
  37.         uv_fs_close(uv_default_loop(), &close_req, rr->fd, NULL);
  38.     } else {
  39.         fs_req_t* wr = (fs_req_t *) malloc(sizeof(fs_req_t));
  40.         wr->fd = rr->fd;
  41.         wr->buf = rr->buf;
  42.         uv_fs_write(uv_default_loop(), &wr->req, 1, wr->buf.base, rr->req.result, -1, after_fs_write);
  43.     }
  44.     uv_fs_req_cleanup(&rr->req);
  45.     free(rr);
  46. }
  47.  
  48. void after_fs_open(uv_fs_t *req) {
  49.     if (req->result < 0) {
  50.         fprintf(stderr, "error opening file: %d\n", uv_strerror(req->result));
  51.     } else {
  52.         fs_req_t *rr = (fs_req_t *) malloc(sizeof(fs_req_t));
  53.         rr->fd = req->result;
  54.         rr->buf = uv_buf_init((char *) malloc(bufsize), bufsize);
  55.         uv_fs_read(uv_default_loop(), &rr->req, rr->fd, rr->buf.base, rr->buf.len, -1, after_fs_read);
  56.     }
  57.     uv_fs_req_cleanup(req);
  58. }
  59.  
  60. int main(int argc, char **argv) {
  61.     uv_fs_t open_req;
  62.     uv_fs_open(uv_default_loop(), &open_req, argv[1], O_RDONLY, 0, after_fs_open);
  63.     return uv_run(uv_default_loop(), UV_RUN_DEFAULT);
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement