Files @ 1b885b7c9c3e
Branch filter:

Location: DistRen/src/common/execio.h

ethanzonca
Fixes to slave, todo prune
/*
  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 <http://www.gnu.org/licenses/>.
*/

#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 <unistd.h>

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 **eio, 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 *byteswritten);

/**
  use this function to determine if the using program should keep trying to read/write

  @todo is this function good enough/necessary?
 */
enum execio_state execio_state(struct execio *eio);

/**
   Closes an execio session.
   @return nonzero on error 
*/
int execio_close(struct execio *eio);

#endif