コード例 #1
0
ファイル: echoserverp_.c プロジェクト: weiang/C-codes
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);
}
コード例 #2
0
ファイル: rcver.c プロジェクト: wcybxzj/shangguan
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);
}