#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid
[] = "@(#)openchild.c 2.3 88/08/15 4.0 RPCSRC; from 1.7 88/02/08 SMI";
* Sun RPC is a product of Sun Microsystems, Inc. and is provided for
* unrestricted use provided that this legend is included on all tape
* media and as a part of the software program in whole or part. Users
* may copy or modify Sun RPC without charge, but are not authorized
* to license or distribute it to anyone else except as part of a product or
* program developed by the user.
* SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
* Sun RPC is provided with no support and without any obligation on the
* part of Sun Microsystems, Inc. to assist in its use, correction,
* modification or enhancement.
* SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
* In no event will Sun Microsystems, Inc. be liable for any lost revenue
* or profits or other special, indirect and consequential damages, even if
* Sun has been advised of the possibility of such damages.
* Mountain View, California 94043
* Copyright (c) 1988 by Sun Microsystems, Inc.
* Open two pipes to a child process, one for reading, one for writing.
* The pipes are accessed by FILE pointers. This is NOT a public
* interface, but for internal use only!
static char SHELL
[] = "/bin/sh";
* returns pid, or -1 for failure
_openchild(command
, fto
, ffrom
)
* child: read from pdto[0], write into pdfrom[1]
for (i
= _rpc_dtablesize() - 1; i
>= 3; i
--) {
com
= malloc((unsigned) strlen(command
) + 6);
(void) sprintf(com
, "exec %s", command
);
execl(SHELL
, basename(SHELL
), "-c", com
, NULL
);
* parent: write into pdto[1], read from pdfrom[0]
*fto
= fdopen(pdto
[1], "w");
*ffrom
= fdopen(pdfrom
[0], "r");
* error cleanup and return