Beispiel #1
0
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);
}
Beispiel #2
0
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;
}
Beispiel #3
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);
    }
}
Beispiel #4
0
void destroy_server(int signo){
    if(signo == SIGINT){
        char server[BUFFER];
        CREATE_SERVER_FIFO_NAME(server);
        unlink(server);
        kill(getpid(), SIGTERM);
        exit(0);
    }
}