--- libaitio/example/test_exec.c 2013/12/05 12:45:53 1.1 +++ libaitio/example/test_exec.c 2013/12/15 22:57:20 1.2 @@ -0,0 +1,73 @@ +#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; +}