File:  [ELWIX - Embedded LightWeight unIX -] / libaitio / example / test_exec.c
Revision 1.1.2.7: download - view: text, annotated - select for diffs - revision graph
Fri Dec 6 01:03:02 2013 UTC (12 years ago) by misho
Branches: io6_7
get new way of popen

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <aitio.h>
#include <sys/wait.h>


int
main(int argc, char **argv)
{
	prog_t *p;
	FILE *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))) {
		printf("0.exited procs=%d\n", ret);
		goto end;
	} else {
		printf("wait for keystroke %p ", p);
		getchar();
	}

	ret = io_progCheck(p);
	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);
	printf("f=%p\n", f);
	while (read(fileno(f), str, sizeof str) > 0) {
		printf(">>> %s", str);
		fgets(str, sizeof str, stdin);
		if (*str == '.')
			break;
		write(fileno(f), str, strlen(str));
	}
	io_progDetach(p, f);

	printf("wait for keystroke %p ", p);
	if (getchar() == 'a')
		goto again;
end:
	io_progDestroy(&p);
	return ret;
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>