test10.c

来自「minix操作系统最新版本(3.1.1)的源代码」· C语言 代码 · 共 70 行

C
70
字号
/* * Test name: test10.c * * Objetive: The purpose of this test is to make sure that select works * when working with the terminal with timeouts * * Description:  This tests wait entry from stdin using select and displays * it again in stdout when it is ready to write (which is always). It has * a timeout value as well. *  * Jose M. Gomez */#include <time.h>#include <sys/types.h>#include <sys/asynchio.h>#include <fcntl.h>#include <unistd.h>#include <sys/select.h>#include <stdio.h>#include <stdlib.h>#include <limits.h>#include <string.h>void main(void) {	fd_set fds_read, fds_write;	int retval;	char data[1024];	struct timeval timeout;	while(1) {		timeout.tv_sec = 3;		timeout.tv_usec = 0;		FD_ZERO(&fds_read);		FD_ZERO(&fds_write);		FD_SET(0, &fds_read);		FD_SET(1, &fds_write);		printf("Input some data: ");		fflush(stdout);		retval=select(3, &fds_read, NULL, NULL, &timeout); 		if (retval < 0) {			fprintf(stderr, "Error while executing select\n");			exit(-1);		}		if (retval == 0) {			printf("\n Hey! Feed me some data!\n");			fflush(stdout);			continue;		}		if (!FD_ISSET(0, &fds_read)) {			fprintf(stderr, "Error: stdin not ready (?)\n");			exit(-1);		}		gets(data);		if (!strcmp(data, "exit"))			exit(0);		printf("Try to write it back\n");		retval=select(3, NULL, &fds_write, NULL, NULL);		if (retval < 0) {			fprintf(stderr, "Error while executing select\n");			exit(-1);		}		if (!FD_ISSET(1, &fds_write)) {			fprintf(stderr, "Error: stdout not ready (?)\n");			exit(-1);		}		printf("Data: %s\n", data);	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?