int main() { signal(SIGINT, die); pid_t my_pid = getpid(); char server_fifo_name[500]; char my_read_fifo_name[500]; // server's write end char my_write_fifo_name[500]; // server's read end CREATE_SERVER_FIFO_NAME(server_fifo_name); fprintf(stderr, "%s\n", server_fifo_name); CREATE_CLIENT_READER_NAME(my_read_fifo_name, my_pid); CREATE_CLIENT_WRITER_NAME(my_write_fifo_name, my_pid); fprintf(stderr, "Client is writing to %s\n", my_write_fifo_name); fprintf(stderr, "Client is reading from %s\n", my_read_fifo_name); int server_pipe = open(server_fifo_name, O_RDWR); write(server_pipe, &my_pid, sizeof(pid_t)); close(server_pipe); int err = mkfifo(my_read_fifo_name, FIFO_PERMISSIONS); if (err) perror("Could not create fifo"); err = mkfifo(my_write_fifo_name, FIFO_PERMISSIONS); if (err) perror("Could not create fifo"); int my_read_fifo = open(my_read_fifo_name, O_RDWR); int my_write_fifo = open(my_write_fifo_name, O_RDWR); read_write_loop(my_read_fifo, my_write_fifo); close(my_read_fifo); close(my_write_fifo); remove(my_read_fifo_name); remove(my_write_fifo_name); }
int main(){ signal(SIGINT, destroy_server); char server_path[BUFFER]; CREATE_SERVER_FIFO_NAME(server_path); create_server(); char* client_pid = NULL; char hack; long pid = 0; FILE* server_fd = fopen(server_path, "r+"); size_t len = 0; ssize_t read; while((read = getline(&client_pid, &len, server_fd)) != -1){ fread(&hack, sizeof(char), 1, server_fd); pid = strtol(client_pid, NULL, 10); if(fork() == 0){ printf("Creating server for Client %ld\n", pid); baby_server_read(pid); } if(signal(SIGINT, destroy_server) == SIG_ERR){ printf("Signal didn't work"); } } return 0; }
void create_server(){ char server[BUFFER]; CREATE_SERVER_FIFO_NAME(server); if(mkfifo(server, FIFO_PERMISSIONS) == -1){ printf("Could not create fifo!\n%s\n", strerror(errno)); exit(1); } }
void destroy_server(int signo){ if(signo == SIGINT){ char server[BUFFER]; CREATE_SERVER_FIFO_NAME(server); unlink(server); kill(getpid(), SIGTERM); exit(0); } }