/* Copyright 2008 Nathan Phillip Brink, Ethan Zonca This file is a part of DistRen. DistRen is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. DistRen is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with DistRen. If not, see . */ #ifndef _DISTREN_EXECIO_H #define _DISTREN_EXECIO_H /* This file tries to abstract away getting a socket/fd that talks to a spawned program */ #include enum execio_state { EXECIO_STATE_ERROR, EXECIO_STATE_EOF }; struct execio { int pipe_write; int pipe_read; enum execio_state state; pid_t child; }; /* runs progname with the arguments in argv. argv must be null terminated!!!!!!!!! returns nonzero return on error */ int execio_open(struct execio **rem, const char *progname, char *const argv[]); /* doesn't block, returns 0 on success, 1 on failure */ int execio_read(struct execio *eio, void *buf, size_t len, size_t *bytesread); int execio_write(struct execio *eio, void *buf, size_t len, size_t *bytesread); /* use this function to determine if the using program should keep trying to read/write */ enum execio_state execio_state(struct execio *eio); /* nonzero return on error */ int execio_close(struct execio *eio); #endif