--- libaitio/inc/aitio.h 2013/12/05 14:12:25 1.38.10.3 +++ libaitio/inc/aitio.h 2013/12/08 21:11:54 1.38.10.11 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.h,v 1.38.10.3 2013/12/05 14:12:25 misho Exp $ +* $Id: aitio.h,v 1.38.10.11 2013/12/08 21:11:54 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -123,6 +123,7 @@ typedef struct { pthread_mutex_t prog_mtx; array_t *prog_fds; + unsigned int *prog_used; } prog_t; @@ -133,24 +134,6 @@ const char *io_GetError(); /* - * io_popen() - ELWIX replacement of standard popen - * - * @command = command - * @type = type - * @ppid = return pid of child program - * return: NULL error or !=NULL open program - */ -FILE *io_popen(const char *command, const char *type, pid_t *ppid); -/* - * io_pclose() - ELWIX replacement of standard pclose - * - * @iop = popen handle - * return: -1 error or !=-1 pid status - */ -int io_pclose(FILE *iop); - - -/* * io_progInit() - Init program pool * * @progName = program name for execution @@ -169,14 +152,30 @@ prog_t *io_progInit(const char *progName, */ int io_progOpen(prog_t * __restrict prg, unsigned int execNum); /* + * io_progGrow() - Execute to number of programs in pool + * + * @prg = program pool + * @toNum = execute to number of programs (0 max) + * return: 0 error, >0 executed programs and abs(<0) executed programs with logged error + */ +int io_progGrow(prog_t * __restrict prg, unsigned int toNum); +/* * io_progVacuum() - Vacuum pool to running number of programs * * @prg = program pool * @toNum = vacuum to number of programs (0 to init number) * return: 0 error or >0 closed programs */ -int io_progVacuum(prog_t * __restrict prg, u_int toNum); +int io_progVacuum(prog_t * __restrict prg, unsigned int toNum); /* + * io_progCloseAt() - Close program at pool of certain position + * + * @prg = program pool + * @idx = index at pool + * return: 0 error or !=0 closed program + */ +int io_progCloseAt(prog_t * __restrict prg, unsigned int idx); +/* * io_progClose() - Close all programs in pool * * @prg = program pool @@ -191,6 +190,40 @@ int io_progClose(prog_t * __restrict prg, unsigned int * return: none */ void io_progDestroy(prog_t ** __restrict pprg); + +/* + * io_progCheck() - Check exit status of program pool + * + * @prg = program pool + * @re = resurrect program + * return: -1 error or >-1 exited programs + */ +int io_progCheck(prog_t * __restrict prg, int re); + +/* + * io_progAttach() - Attach to open program + * + * @prg = program pool + * @newOne = Execute new one program after attach + * return: NULL error or !=NULL attached program handle + */ +#ifdef POPEN_STREAM +FILE *io_progAttach(prog_t * __restrict prg, int newOne); +#else +int io_progAttach(prog_t * __restrict prg, int newOne); +#endif +/* + * io_progDetach() - Detch from open program + * + * @prg= program pool + * @pfd = attached program handle + * return: none + */ +#ifdef POPEN_STREAM +void io_progDetach(prog_t * __restrict prg, FILE *pfd); +#else +void io_progDetach(prog_t * __restrict prg, int pfd); +#endif /*