rbb         99/04/23 11:00:00

  Modified:    apr/test Makefile
               docs     threadproc.txt
  Added:       apr/test testproc.c
               apr/threadproc/unix Makefile proc.c threadproc.h
               include  apr_thread_proc.h
  Log:
  Initial version of the process management stuff.  Also first half of test
  program for process management.  The process management test program requires
  a proctest directory in the test directory, so I have committed that directory
  already.
  
  Revision  Changes    Path
  1.5       +7 -4      apache-apr/apr/test/Makefile
  
  Index: Makefile
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/Makefile,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Makefile  1999/04/23 11:38:13     1.4
  +++ Makefile  1999/04/23 17:59:51     1.5
  @@ -12,12 +12,12 @@
   SRCDIR=..
   EXTRA_CFLAGS=-g 
   EXTRA_LDFLAGS=
  -EXTRA_LIBS= -L../file_io -lfile -L../network_io -lnetwork
  +EXTRA_LIBS=-L../threadproc -lthreadproc -L../file_io -lfile -L../network_io 
-lnetwork 
   EXTRA_INCLUDES=
   EXTRA_DEPS=
   OSDIR=
   INCDIR=../../include
  -INCLUDES0=-I ../file_io/unix -I ../network_io/unix -I $(INCDIR)
  +INCLUDES0=-I ../file_io/unix -I ../network_io/unix -I ../threadproc/unix -I 
$(INCDIR)
   SHELL=/bin/sh
   CC=gcc
   CPP=gcc -E
  @@ -45,13 +45,16 @@
   INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES)
   LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
   
  -OBJS= testfile.o ab_apr.o
  +OBJS= testfile.o ab_apr.o testproc.o
   
   .c.o:
        $(CC) -c $(INCLUDES) $(CFLAGS) $(LIBS) $<
   
   all:
  -     testfile ab_apr
  +     testfile ab_apr testproc
  +
  +testproc:
  +     $(CC) testproc.c $(INCLUDES) $(CFLAGS) $(LIBS) $<
   
   testfile:
        $(CC) testfile.c $(INCLUDES) $(CFLAGS) $(LIBS) $<
  
  
  
  1.1                  apache-apr/apr/test/testproc.c
  
  Index: testproc.c
  ===================================================================
  /* ====================================================================
   * Copyright (c) 1999 The Apache Group.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * 4. The names "Apache Server" and "Apache Group" must not be used to
   *    endorse or promote products derived from this software without
   *    prior written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Group.
   * For more information on the Apache Group and the Apache HTTP server
   * project, please see <http://www.apache.org/>.
   *
   */
  
  #include "apr_thread_proc.h"
  #include "apr_errno.h"
  #include "apr_general.h"
  #include "errno.h"
  #include <stdio.h>
  
  int test_filedel(void);
  int testdirs(void);
  
  int main()
  {
      apr_proc_t *newproc;
      apr_procattr_t *attr;
  
      fprintf(stdout, "Creating procattr.......");
      attr = apr_createprocattr_init();
      if (attr == NULL) {
          fprintf(stderr, "Could not create attr\n");
          exit(-1);;
      }
      fprintf(stdout, "OK.\n");
  
      fprintf(stdout, "Setting attr pipes, all three.......");
      if (apr_setprocattr_io(attr, 1, 1, 1) == APR_FAILURE) {
          fprintf(stderr, "Could not set pipes attr\n");
          exit(-1);
      }
      fprintf(stdout, "OK.\n");
      
      fprintf(stdout, "Setting attr dir.......");
      if (apr_setprocattr_dir(attr, "proctest") == APR_FAILURE) {
          fprintf(stderr, "Could not set directory attr\n");
          exit(-1);
      }
      fprintf(stdout, "OK.\n");
  
      fprintf(stdout, "Setting attr cmd type.......");
      if (apr_setprocattr_cmdtype(attr, APR_PROGRAM) == APR_FAILURE) {
          fprintf(stderr, "Could not set cmd type attr\n");
          exit(-1);
      }
      fprintf(stdout, "OK.\n");
  }
  
  
  
  
  1.1                  apache-apr/apr/threadproc/unix/Makefile
  
  Index: Makefile
  ===================================================================
  ##
  ##  Apache Makefile, automatically generated by Configure script.
  ##  Hand-edited changes will be lost if the Configure script is re-run.
  ##  Sources: - ../Makefile.config (via Configuration.apaci)
  ##           - ./Makefile.tmpl
  ##
  
  ##
  ##  Inherited Makefile options from Configure script
  ##  (Begin of automatically generated section)
  ##
  SRCDIR=..
  EXTRA_CFLAGS=-g 
  EXTRA_LDFLAGS=
  EXTRA_LIBS=-L ../../fileio -lfile
  EXTRA_INCLUDES=
  EXTRA_DEPS=
  OSDIR=
  INCDIR=../../../include
  INCLUDES0=-I . -I $(INCDIR) -I ../../file_io/unix
  SHELL=/bin/sh
  CC=gcc
  CPP=gcc -E
  TARGET=
  OPTIM=
  CFLAGS_SHLIB=-fpic -DSHARED_MODULE
  LD_SHLIB=ld
  LDFLAGS_SHLIB=-Bshareable
  LDFLAGS_SHLIB_EXPORT=-rdynamic
  CFLAGS1= -DLINUX=2 -pthread -DUSE_HSREGEX
  INCLUDES1=
  LIBS_SHLIB=
  LDFLAGS1=
  MFLAGS_STATIC=--no-print-directory
  REGLIB=regex/libregex.a
  RANLIB=ranlib
  LIBS1= -lm -lcrypt -lndbm -ldl
  ##
  ##  (End of automatically generated section)
  ##
  
  
  CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
  LIBS=$(EXTRA_LIBS) $(LIBS1)
  INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES)
  LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
  
  LIB=  libthreadproc.a
  
  OBJS= proc.o 
        
  .c.o:
        $(CC) -c $(INCLUDES) $(CFLAGS) $<
  
  all: $(HEADERS) $(LIB)
  
  $(LIB): $(OBJS)
        rm -f $@
        ar cr $@ $(OBJS)
        $(RANLIB) $@
        cp $@ ../
  clean:
        rm -f *.o $(LIB)
  
  distclean: clean
        -rm -f Makefile
  
  # We really don't expect end users to use this rule.  It works only with
  # gcc, and rebuilds Makefile.tmpl.  You have to re-run Configure after
  # using it.
  depend:
        cp Makefile.tmpl Makefile.tmpl.bak \
            && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
            && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \
            && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' \
                   -e '1,$$s: $(OSDIR)/: $$(OSDIR)/:g' Makefile.new \
                > Makefile.tmpl \
            && rm Makefile.new
  
  #Dependencies
  
  $(OBJS): Makefile
  
  # DO NOT REMOVE
  open.o: proc.c
  
  
  
  1.1                  apache-apr/apr/threadproc/unix/proc.c
  
  Index: proc.c
  ===================================================================
  /* ====================================================================
   * Copyright (c) 1999 The Apache Group.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * 4. The names "Apache Server" and "Apache Group" must not be used to
   *    endorse or promote products derived from this software without
   *    prior written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Group.
   * For more information on the Apache Group and the Apache HTTP server
   * project, please see <http://www.apache.org/>.
   *
   */
  
  #include "apr_thread_proc.h"
  #include "apr_file_io.h"
  #include "apr_general.h"
  #include <string.h>
  #include <signal.h>
  #include "threadproc.h"
  #include "fileio.h"
  
  apr_procattr_t *apr_createprocattr_init(void)
  {
      apr_procattr_t *new = (apr_procattr_t *)malloc(sizeof(apr_procattr_t));
  
      new->parent_in = NULL;
      new->child_in = NULL;
      new->parent_out = NULL;
      new->child_out = NULL;
      new->parent_err = NULL;
      new->child_err = NULL;
      new->currdir = NULL; 
      new->cmdtype = APR_PROGRAM;
      return new;
  }
  
  apr_status_t apr_setprocattr_io(apr_procattr_t *attr, apr_int32_t in, 
                                   apr_int32_t out, apr_int32_t err)
  {
      if (in) {
          attr->parent_in = (apr_file_t *)malloc(sizeof(apr_file_t));
          attr->child_in = (apr_file_t *)malloc(sizeof(apr_file_t));
          if (apr_create_pipe(attr->child_in, attr->parent_in) == APR_FAILURE) {
              return APR_FAILURE;
          }
      } 
      if (out) {
          attr->parent_out = (apr_file_t *)malloc(sizeof(apr_file_t));
          attr->child_out = (apr_file_t *)malloc(sizeof(apr_file_t));
          if (apr_create_pipe(attr->parent_out, attr->child_out) == 
APR_FAILURE) {
              return APR_FAILURE;
          }
      } 
      if (err) {
          attr->parent_err = (apr_file_t *)malloc(sizeof(apr_file_t));
          attr->child_err = (apr_file_t *)malloc(sizeof(apr_file_t));
          if (apr_create_pipe(attr->parent_err, attr->child_err) == 
APR_FAILURE) {
              return APR_FAILURE;
          }
      } 
  }
  
  apr_status_t apr_setprocattr_dir(apr_procattr_t *attr, char *dir) 
  {
      attr->currdir = strdup(dir);
  }
  
  apr_status_t apr_setprocattr_cmdtype(apr_procattr_t *attr, apr_cmdtype_e cmd) 
  {
      attr->cmdtype = cmd;
  }
  
  apr_int32_t apr_fork(apr_proc_t *proc)
  {
      int pid;
  
      if ((pid = fork()) < 0) {
          return -1;
      }
      else if (pid == 0) {
          proc->pid = pid;
          proc->attr = NULL;
          return pid;
      }
      proc->pid = pid;
      proc->attr = NULL;
      return 1;
  }
  
  apr_proc_t *apr_create_process(char *progname, char *args, char **env, 
apr_procattr_t *attr)
  {
      apr_proc_t *new = (apr_proc_t *)malloc(sizeof(apr_proc_t));
  
      if ((new->pid = fork()) < 0) {
          return NULL;
      }
      else if (new->pid == 0) { 
          /* child process */
          if (attr->child_in) {
              apr_close(attr->parent_in);
              dup2(attr->child_in->filedes, STDIN_FILENO);
              apr_close(attr->child_in);
          }
          if (attr->child_out) {
              apr_close(attr->parent_out);
              dup2(attr->child_out->filedes, STDOUT_FILENO);
              apr_close(attr->child_out);
          }
          if (attr->child_err) {
              apr_close(attr->parent_err);
              dup2(attr->child_err->filedes, STDERR_FILENO);
              apr_close(attr->child_err);
          }
          
          signal(SIGCHLD, SIG_DFL); /*not sure if this is needed or not */
  
          if (attr->currdir != NULL) {
              if (chdir(attr->currdir) == -1) {
                  free(new);
                  exit(-1);   /* We have big problems, the child should exit. */
              }
          }
          
          if (attr->cmdtype == APR_SHELLCMD) {
              execle(SHELL_PATH, SHELL_PATH, "-c", args, NULL, env);
          }
          else {
              execle(progname, args, NULL, env);
          }
          exit(-1);  /* if we get here, there is a problem, so exit with an */ 
                     /* error code. */
      }
      /* Parent process */
      if (attr->child_in) {
          apr_close(attr->child_in);
      }
      if (attr->child_out) {
          apr_close(attr->child_out);
      }
      if (attr->child_err) {
          apr_close(attr->child_err);
      }
      
      new->attr = attr;
  }
  
  apr_file_t *apr_get_childin(apr_proc_t *proc)
  {
      return proc->attr->parent_in; 
  }
  
  apr_file_t *apr_get_childout(apr_proc_t *proc)
  {
      return proc->attr->parent_out; 
  }
  
  apr_file_t *apr_get_childerr(apr_proc_t *proc)
  {
      return proc->attr->parent_err; 
  }    
  
  
  
  
  1.1                  apache-apr/apr/threadproc/unix/threadproc.h
  
  Index: threadproc.h
  ===================================================================
  /* ====================================================================
   * Copyright (c) 1999 The Apache Group.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * 4. The names "Apache Server" and "Apache Group" must not be used to
   *    endorse or promote products derived from this software without
   *    prior written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Group.
   * For more information on the Apache Group and the Apache HTTP server
   * project, please see <http://www.apache.org/>.
   *
   */
  
  #include "apr_thread_proc.h"
  #include "apr_file_io.h"
  #include <pthread.h>
  
  #ifndef THREAD_PROC_H
  #define THREAD_PROC_H
  
  #define SHELL_PATH "/bin/sh"
  
  struct thread_t {
      pthread_t *td;
      pthread_attr_t *attr;
  };
  
  struct procattr_t {
      apr_file_t *parent_in;
      apr_file_t *child_in;
      apr_file_t *parent_out;
      apr_file_t *child_out;
      apr_file_t *parent_err;
      apr_file_t *child_err;
      char *currdir;
      apr_int32_t cmdtype;
  };
  
  struct proc_t {
      pid_t pid;
      struct procattr_t *attr;
  };
  
  #endif  /* ! THREAD_PROC_H */
  
  
  
  
  1.1                  apache-apr/include/apr_thread_proc.h
  
  Index: apr_thread_proc.h
  ===================================================================
  /* ====================================================================
   * Copyright (c) 1999 The Apache Group.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * 4. The names "Apache Server" and "Apache Group" must not be used to
   *    endorse or promote products derived from this software without
   *    prior written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Group.
   * For more information on the Apache Group and the Apache HTTP server
   * project, please see <http://www.apache.org/>.
   *
   */
  
  #ifndef APR_THREAD_PROC_H
  #define APR_THREAD_PROC_H
  
  #include "threadproc.h"
  #include "apr_general.h"
  #include "apr_errno.h"
  
  typedef enum {APR_SHELLCMD, APR_PROGRAM} apr_cmdtype_e;
  
  typedef struct thread_t           apr_thread_t;
  typedef struct proc_t           apr_proc_t;
  typedef struct procattr_t         apr_procattr_t;
  
  /*   Function definitions */
  apr_procattr_t *apr_createprocattr_init(void);
  apr_status_t apr_setprocattr_io(apr_procattr_t *, apr_int32_t, apr_int32_t, 
apr_int32_t);
  apr_status_t apr_setprocattr_dir(apr_procattr_t *, char *);
  apr_status_t apr_setprocattr_cmdtype(apr_procattr_t *, apr_cmdtype_e);
  
  apr_file_t *apr_get_childin(apr_proc_t *);
  apr_file_t *apr_get_childout(apr_proc_t *);
  apr_file_t *apr_get_childerr(apr_proc_t *);
  
  apr_int32_t apr_fork(apr_proc_t *);
  apr_proc_t *apr_create_process(char *, char *, char **, apr_procattr_t *);
  
  #endif  /* ! APR_FILE_IO_H */
  
  
  
  
  
  
  1.3       +37 -8     apache-apr/docs/threadproc.txt
  
  Index: threadproc.txt
  ===================================================================
  RCS file: /home/cvs/apache-apr/docs/threadproc.txt,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- threadproc.txt    1999/04/20 20:46:43     1.2
  +++ threadproc.txt    1999/04/23 18:00:00     1.3
  @@ -1,4 +1,8 @@
   ---------------------------Thread/Process abstraction
  +
  +NOTE:  There is a one-to-one mapping between process and process_attr's.  
This
  +       relationship does not exist with threads and thread_attr's.
  +
    apr_thread_t *apr_create_thread(void * (void *), void *,
              APRUInt32)
        Create a new thread
  @@ -14,8 +18,9 @@
   apr_int32_t apr_fork(apr_proc_t *)
           create a new process with a copy of the currently executing address 
space.
        Arguments:
  -        arg 1)  the proccess type for the newly created process.
  -        return) status.  APR_FAILURE on error, 0 if child process, 1 if 
original
  +        arg 1)  the proccess type for the newly created process.  NULL on 
error.
  +                which fields are filled out in this structure is undefined.
  +        return) status.  -1 on error, 0 if child process, 1 if original
                   process.
   NOTE:  This is a non-portable call.  It cannot be avoided, and any system 
that 
          can create this function should do so.  Any platform that is not able
  @@ -35,8 +40,10 @@
           arg 3)  Should we setup a pipe for stdout? 1 yes, 0 no
           arg 4)  Should we setup a pipe for stderr? 1 yes, 0 no.
           return) APR_SUCCESS or APR_FAILURE
  -NOTE:  the file structures are a part of the process atr variable.  They are
  -       created and filled out by this func. 
  +NOTE:  the file structures are a part of the process attr variable.  They are
  +       created and filled out by this func.  On UNIX, this function actually
  +       creates the pipe(s), but lets apr_create_process set them up as 
  +       std(in|out|err).
   
   apr_status_t apr_setprocattr_dir(apr_procattr_t *, char *)
          define starting directory for new process.
  @@ -55,11 +62,33 @@
        arg 4)  a pointer to structure that describes the attributes of the new
                process.  If NULL, process will have the default attributes.
        return) Process description structure.
  - APRStatus apr_procsetcurrdir(APRPROCESSATTR *, char *);
  -     change the current directory of the process attribute structure.
  +
  +apr_file_t *apr_get_childin(apr_proc_t *)
  +        Get the parent side of the pipe that connects to the child's stdin.
  +        This function is only valid after a process has successfully spawned
  +        a child
  +     Arguments:
  +        arg 1)  The process that spawned the child
  +        return) The file to use when writing to the child's stdin.  NULL
  +                on error. 
  +
  +apr_file_t *apr_get_childout(apr_proc_t *)
  +        Get the parent side of the pipe that connects to the child's stdout.
  +        This function is only valid after a process has successfully spawned
  +        a child
  +     Arguments:
  +        arg 1)  The process that spawned the child
  +        return) The file to use when reading from the child's stdout.  NULL
  +                on error. 
  +
  +apr_file_t *apr_get_childerr(apr_proc_t *)
  +        Get the parent side of the pipe that connects to the child's stderr.
  +        This function is only valid after a process has successfully spawned
  +        a child
        Arguments:
  -     arg 1)  Structure to change the dir in.
  -     arg 2)  Path to change the directory to in the APRPROCESSATTR struct.
  +        arg 1)  The process that spawned the child
  +        return) The file to use when reading from the child's stderr.  NULL
  +                on error.   
   
    APRStatus  apr_get_thread_private(APRUInt32, APThdPriv)
           Get the thread private data for the current thread
  
  
  

Reply via email to