libuv/docs/code/uvtee/main.c
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <fcntl.h>
3 #include <unistd.h>
4 #include <string.h>
5 #include <stdlib.h>
6 
7 #include <uv.h>
8 
9 typedef struct {
11  uv_buf_t buf;
12 } write_req_t;
13 
18 
19 void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf) {
20  *buf = uv_buf_init((char*) malloc(suggested_size), suggested_size);
21 }
22 
24  write_req_t *wr = (write_req_t*) req;
25  free(wr->buf.base);
26  free(wr);
27 }
28 
31 }
32 
35 }
36 
38  write_req_t *req = (write_req_t*) malloc(sizeof(write_req_t));
39  req->buf = uv_buf_init((char*) malloc(size), size);
40  memcpy(req->buf.base, buf.base, size);
41  uv_write((uv_write_t*) req, (uv_stream_t*)dest, &req->buf, 1, cb);
42 }
43 
45  if (nread < 0){
46  if (nread == UV_EOF){
47  // end of file
48  uv_close((uv_handle_t *)&stdin_pipe, NULL);
49  uv_close((uv_handle_t *)&stdout_pipe, NULL);
50  uv_close((uv_handle_t *)&file_pipe, NULL);
51  }
52  } else if (nread > 0) {
55  }
56 
57  // OK to free buffer as write_data copies it.
58  if (buf->base)
59  free(buf->base);
60 }
61 
62 int main(int argc, char **argv) {
64 
67 
70 
71  uv_fs_t file_req;
72  int fd = uv_fs_open(loop, &file_req, argv[1], O_CREAT | O_RDWR, 0644, NULL);
74  uv_pipe_open(&file_pipe, fd);
75 
77 
79  return 0;
80 }
write_data
void write_data(uv_stream_t *dest, size_t size, uv_buf_t buf, uv_write_cb cb)
Definition: libuv/docs/code/uvtee/main.c:37
on_stdout_write
void on_stdout_write(uv_write_t *req, int status)
Definition: libuv/docs/code/uvtee/main.c:29
uv_fs_open
UV_EXTERN int uv_fs_open(uv_loop_t *loop, uv_fs_t *req, const char *path, int flags, int mode, uv_fs_cb cb)
Definition: unix/fs.c:1812
stdin_pipe
uv_pipe_t stdin_pipe
Definition: libuv/docs/code/uvtee/main.c:15
uv_pipe_init
UV_EXTERN int uv_pipe_init(uv_loop_t *, uv_pipe_t *handle, int ipc)
Definition: unix/pipe.c:33
string.h
buf
voidpf void * buf
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
write_req_t
Definition: worker.c:11
status
absl::Status status
Definition: rls.cc:251
uv_run
UV_EXTERN int uv_run(uv_loop_t *, uv_run_mode mode)
Definition: unix/core.c:361
uv_fs_s
Definition: uv.h:1294
uv_close
UV_EXTERN void uv_close(uv_handle_t *handle, uv_close_cb close_cb)
Definition: unix/core.c:112
uv_stream_s
Definition: uv.h:491
memcpy
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
uv_default_loop
UV_EXTERN uv_loop_t * uv_default_loop(void)
Definition: uv-common.c:733
ssize_t
intptr_t ssize_t
Definition: win.h:27
uv_write
UV_EXTERN int uv_write(uv_write_t *req, uv_stream_t *handle, const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb)
Definition: unix/stream.c:1492
read_stdin
void read_stdin(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf)
Definition: libuv/docs/code/uvtee/main.c:44
req
static uv_connect_t req
Definition: test-connection-fail.c:30
UV_RUN_DEFAULT
@ UV_RUN_DEFAULT
Definition: uv.h:254
uv_read_start
UV_EXTERN int uv_read_start(uv_stream_t *, uv_alloc_cb alloc_cb, uv_read_cb read_cb)
Definition: unix/stream.c:1555
alloc_buffer
void alloc_buffer(uv_handle_t *handle, size_t suggested_size, uv_buf_t *buf)
Definition: libuv/docs/code/uvtee/main.c:19
tests.qps.qps_worker.dest
dest
Definition: qps_worker.py:45
main
int main(int argc, char **argv)
Definition: libuv/docs/code/uvtee/main.c:62
uv_buf_t::base
char * base
Definition: unix.h:122
free_write_req
void free_write_req(uv_write_t *req)
Definition: libuv/docs/code/uvtee/main.c:23
uv.h
uv_buf_t
Definition: unix.h:121
stdout_pipe
uv_pipe_t stdout_pipe
Definition: libuv/docs/code/uvtee/main.c:16
file_pipe
uv_pipe_t file_pipe
Definition: libuv/docs/code/uvtee/main.c:17
uv_write_cb
void(* uv_write_cb)(uv_write_t *req, int status)
Definition: uv.h:312
write_req_t::buf
uv_buf_t buf
Definition: worker.c:13
uv_pipe_s
Definition: uv.h:757
uv_buf_init
UV_EXTERN uv_buf_t uv_buf_init(char *base, unsigned int len)
Definition: uv-common.c:157
uv_write_s
Definition: uv.h:522
loop
uv_loop_t * loop
Definition: libuv/docs/code/uvtee/main.c:14
handle
static csh handle
Definition: test_arm_regression.c:16
uv_handle_s
Definition: uv.h:441
uv_loop_s
Definition: uv.h:1767
on_file_write
void on_file_write(uv_write_t *req, int status)
Definition: libuv/docs/code/uvtee/main.c:33
size
voidpf void uLong size
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
uv_pipe_open
UV_EXTERN int uv_pipe_open(uv_pipe_t *, uv_file file)
Definition: unix/pipe.c:137
cb
OPENSSL_EXPORT pem_password_cb * cb
Definition: pem.h:351
stream
voidpf stream
Definition: bloaty/third_party/zlib/contrib/minizip/ioapi.h:136


grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:17