add select(2)-based i/o multiplexing
This commit is contained in:
		
							parent
							
								
									a49919a10c
								
							
						
					
					
						commit
						f9a0524f94
					
				
							
								
								
									
										12
									
								
								std.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								std.c
									
									
									
									
									
								
							| @ -263,13 +263,23 @@ ungetch(int c) { | |||||||
| 
 | 
 | ||||||
| int | int | ||||||
| main(int argc, char *argv[]) { | main(int argc, char *argv[]) { | ||||||
|  | 	fd_set rfds; | ||||||
|  | 	int r; | ||||||
|  | 
 | ||||||
| 	if(argc == 2 && !strcmp("-v", argv[1])) | 	if(argc == 2 && !strcmp("-v", argv[1])) | ||||||
| 		eprint("std-"VERSION", © 2008 Matthias-Christian Ott\n"); | 		eprint("std-"VERSION", © 2008 Matthias-Christian Ott\n"); | ||||||
| 	else if(argc == 1) | 	else if(argc == 1) | ||||||
| 		eprint("usage: st [-v]\n"); | 		eprint("usage: st [-v]\n"); | ||||||
| 	getpty(); | 	getpty(); | ||||||
| 	shell(); | 	shell(); | ||||||
|  | 	FD_ZERO(&rfds); | ||||||
|  | 	FD_SET(STDIN_FILENO, &rfds); | ||||||
|  | 	FD_SET(ptm, &rfds); | ||||||
| 	for(;;) { | 	for(;;) { | ||||||
|  | 		r = select(ptm + 1, &rfds, NULL, NULL, NULL); | ||||||
|  | 		if(r == -1) | ||||||
|  | 			eprintn("error, cannot select"); | ||||||
|  | 		if(FD_ISSET(ptm, &rfds)) { | ||||||
| 			c = getch(); | 			c = getch(); | ||||||
| 			switch(c) { | 			switch(c) { | ||||||
| 			case '\033': | 			case '\033': | ||||||
| @ -278,6 +288,8 @@ main(int argc, char *argv[]) { | |||||||
| 			default: | 			default: | ||||||
| 				putchar(c); | 				putchar(c); | ||||||
| 			} | 			} | ||||||
|  | 			fflush(stdout); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user