Esempio n. 1
0
/* create ring of n processes */
int main(int argc, char *argv[])
{
    int nproc;
    struct ring l, r;	/* 'left' ring and 'right' ring */
    pid_t pid;
    int i, status;
    pid_t *ltp, *rtp;

    bzero(&r, sizeof(struct ring));
    bzero(&l, sizeof(struct ring));
    status = nproc = pid = 0;
    if (argc != 2 || ((nproc = atoi(argv[1])) <= 0))
        err_quit("Uasge: %s processes", argv[0]);

    fprintf(stderr, "Creating ring of %d processes\n", nproc);
    ring_init(&r);
    ring_init(&l);

    for (i = 1; i < nproc; i++) {
        Pipe(r.fd);
        Pipe(l.fd);
        if ((pid = Fork()) > 0) {
            ring_dup_out(&r);
            ring_dup_in(&l);
        } else {
            ring_dup_in(&r);
            ring_dup_out(&l);
        }
        ring_close_fd(&r);
        ring_close_fd(&l);
        if (pid > 0)
            break;
    }

    if ((rtp = calloc((size_t)nproc, sizeof(pid_t))) == NULL)
        err_sys("calloc error");
    (void)msg_all(r.in, r.out, rtp, nproc);
    if ((ltp = calloc((size_t)nproc, sizeof(pid_t))) == NULL)
        err_sys("calloc error");
    (void)msg_all(l.in, l.out, ltp, nproc);

    if (pid > 0)
        if (wait(&status) == -1)
            err_sys("wait error");
    pprintt(rtp, nproc);
    pprintt(ltp, nproc);
    free(rtp);
    free(ltp);
    return 0;
}
Esempio n. 2
0
void process(int cmd, int connfd, std::vector<std::string> &tokens){
    // std::unique_lock<std::mutex> lck(mtx1);
    switch(cmd){
    case 1:{
        msg_all(connfd);
        break;
    }
    case 2:{
        msg_flw(connfd, tokens);
        break;
    }
    case 3:{
        login(connfd, tokens);
        break;
    }
    case 4:{
        user_register(connfd, tokens);
        break;
    }
    case 5:{
        compose(connfd, tokens);
        break;
    }
    case 6:{
        follow(connfd, tokens);
        break;
    }
    case 7:{
        unfollow(connfd, tokens);
        break;
    }
    default:{
        write(connfd, "error", 5);
        break;
    }
    }
}