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