Files @ 94aafba083ee
Branch filter:

Location: DistRen/src/common/execio.h

ethanzonca
Added system changelog and some user creation code
/*
  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 **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);

enum execio_state execio_state(struct execio *eio);

/* nonzero return on error */
int execio_close(struct execio *eio);

#endif