|  | #include <fcntl.h> | 
|  | #include <stdio.h> | 
|  |  | 
|  | // These definitions seem backwards, but they are not. | 
|  | //  They are assigned from the persepctive of how qemu sees them | 
|  | #define SYSCALL_SERVER_PIPE_IN  ".syscall_server_pipe.out" | 
|  | #define SYSCALL_SERVER_PIPE_OUT ".syscall_server_pipe.in" | 
|  |  | 
|  | int init_syscall_server(int* fd_read, int* fd_write) { | 
|  |  | 
|  | printf("Waiting for other end of pipe to connect...\n"); | 
|  | int write = open(SYSCALL_SERVER_PIPE_OUT, O_WRONLY); | 
|  | if(write < 0) | 
|  | return write; | 
|  |  | 
|  | int read = open(SYSCALL_SERVER_PIPE_IN, O_RDONLY); | 
|  | if(read < 0) { | 
|  | close(write); | 
|  | return read; | 
|  | } | 
|  |  | 
|  | *fd_read = read; | 
|  | *fd_write = write; | 
|  | return read+write; | 
|  | } | 
|  |  | 
|  | int read_syscall_server(int fd, char* buf, int len) { | 
|  | return read(fd, buf, len); | 
|  | } | 
|  |  | 
|  | int write_syscall_server(int fd, char* buf, int len, int bytes_to_follow) { | 
|  | return write(fd, buf, len); | 
|  | } | 
|  |  | 
|  |  |