#include #include #include #include #include #include int main(int argc, char **argv) { prog_t *p; int f; int ret = 0; char str[BUFSIZ]; if (argc < 2) return 1; p = io_progInit(argv[1], 3, 10); if (!p) { ELIBERR(io); return 2; } else if ((ret = io_progCheck(p, 0))) { printf("0.exited procs=%d\n", ret); goto end; } else { printf("wait for keystroke %p ", p); getchar(); } ret = io_progCheck(p, 0); if (ret) { printf("1.exited procs=%d\n", ret); goto end; } printf("last=%d\n", array_Last(p->prog_fds)); ret = io_progGrow(p, 8); printf("+grow_progs=%d\n", ret); printf("wait for keystroke %p ", p); getchar(); ret = io_progVacuum(p, 5); printf("+vacuum_progs=%d\n", ret); printf("wait for keystroke %p ", p); getchar(); again: f = io_progAttach(p, 0); printf("f=%d\n", f); write(f, "v\n", 1); memset(str, 0, sizeof str); while (read(f, str, sizeof str) > 0) { printf(">>> %s", str); memset(str, 0, sizeof str); read(0, str, sizeof str); if (*str == '.') break; write(f, str, strlen(str)); } io_progDetach(p, f); printf("(r) wait for keystroke %p ", p); if (getchar() == 'a') goto again; end: io_progDestroy(&p); return ret; }