int main(int argc, char *argv[]) { struct sockaddr_in seraddr, cliaddr; int listenfd, connfd; int cli_len; fd_set read_set, ready_set; signal(SIGCHLD, sig_child); /* Install signal handler */ if (argc != 2) { fprintf(stderr, "Usage: %s <port>\n", argv[0]); exit(EXIT_FAILURE); } if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) error("Socket error"); bzero((char *)&seraddr, sizeof(seraddr)); seraddr.sin_family = AF_INET; seraddr.sin_port = htons(atoi(argv[1])); seraddr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(listenfd, (struct sockaddr *)&seraddr, sizeof(seraddr)) < 0) error("Bind error"); if (listen(listenfd, LENQ) < 0) error("Listen error"); printf("Now listening...\n"); FD_ZERO(&read_set); FD_SET(STDIN_FILENO, &read_set); FD_SET(listenfd, &read_set); cli_len = sizeof(cliaddr); while (1) { ready_set = read_set; select(listenfd + 1, &ready_set, NULL, NULL, NULL); if (FD_ISSET(STDIN_FILENO, &ready_set)) command(); if (FD_ISSET(listenfd, &ready_set)) { if ((connfd = accept(listenfd, (struct sockaddr *)&cliaddr, &cli_len)) < 0) error("Accept error"); if (fork() == 0) { /* Child process */ printf("Connect build successfully!\n"); close(listenfd); echo(connfd); close(connfd); exit(EXIT_SUCCESS); } /* Parent process */ close(connfd); } } close(listenfd); eixt(EXIT_SUCCESS); }
int main(void){ key_t key; int i, msgid; struct msg_st buf; ssize_t len; pid_t pid; long arr[2] ={ONE, TWO}; key = ftok(KEYPATH, KEYPROJ); if(key < 0){ perror("ftok():"); exit(-1); } msgid = msgget(key, IPC_CREAT|0644); if(msgid < 0){ perror("msgget"); exit(-1); } for(i=0; i<2; i++){ pid = fork(); if(pid == 0){ while (1) { len = msgrcv(msgid, &buf, sizeof(buf)- sizeof(long), arr[i], 0); if (len < 0) { perror("msgrcv():"); exit(-1); } printf("mtype:%d,name:%s,math:%d,chinese:%d\n",\ arr[i], buf.name , buf.math, buf.chinese); } eixt(0); } } for(i=0; i<2; i++){ wait(NULL); } msgctl(msgid, IPC_RMID, NULL); exit(0); }