/* 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; }
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; } } }