add select(2)-based i/o multiplexing

This commit is contained in:
Matthias-Christian Ott 2008-06-14 23:24:12 +02:00
parent a49919a10c
commit f9a0524f94
1 changed files with 19 additions and 7 deletions

12
std.c
View File

@ -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;
} }