Provided by: libpcp3-dev_4.0.1-1_amd64 bug

NAME

       __pmProcessPipe, __pmProcessClosePipe - support for process execution at the end of a pipe

C SYNOPSIS

       #include "pmapi.h"
       #include "libpcp.h"

       int __pmProcessAddArg(__pmExecCtl_t **handle, const char *arg);
       int __pmProcessPipe(__pmExecCtl_t **handle, const char *type, int toss, FILE **fp);
       int __pmProcessPipeClose(FILE *fp);

       cc ... -lpcp

CAVEAT

       This documentation is intended for internal Performance Co-Pilot (PCP) developer use.

       These  interfaces  are not part of the PCP APIs that are guaranteed to remain fixed across
       releases, and they may not work, or may provide different semantics at some point  in  the
       future.

DESCRIPTION

       Within the libraries and applications of the Performance Co-Pilot (PCP) these routines are
       provide a convenient and safe alternative to popen(3) and pclose(3) for executing commands
       in a separate process that is connected to the caller by a pipe.

       Setting  up  the  command and arguments is fully documented in __pmProcessAddArg(3) and is
       identical to the procedure used to setup __pmProcessExec(3).

       Once all the command name and arguments have been registered calling __pmProcessPipe  uses
       a pipe (2), fork (2) and execvp (2) sequence to execute the command.

       The  type  argument  needs  to  be ``r'' to read from the pipe, else ``w'' to write to the
       pipe.

       The argument toss may be used to assign some or all of the standard I/O  streams  for  the
       command  to  /dev/null  -  specifically  toss  is either PM_EXEC_TOSS_NONE to keep all I/O
       streams the same as the parent process, else the bit-wise or of PM_EXEC_TOSS_STDIN  and/or
       PM_EXEC_TOSS_STDOUT  and/or  PM_EXEC_TOSS_STDERR  to  reassign  stdin,  stdout  and stderr
       respectively.  PM_EXEC_TOSS_ALL is a convenience macro equivalent to PM_EXEC_TOSS_STDIN  |
       PM_EXEC_TOSS_STDOUT | PM_EXEC_TOSS_STDERR.

       Obviously some combinations of argument values make no sense, e.g. type equal to ``r'' and
       PM_EXEC_TOSS_STDOUT set in toss or type equal to ``w'' and PM_EXEC_TOSS_STDIN set in type.

       __pmProcessPipe returns a standard I/O stream for the pipe via the fp argument.

       Once the caller determines all the work has  been  done,  __pmProcessPipeClose  should  be
       called.

       Nested  calling  of  __pmProcessExec(3)  and/or  __pmProcessPipe  is  not  allowed.   Once
       __pmProcessAddArg(3) is called with handle set to  NULL  to  start  the  registration  and
       execution  sequence  any  attempt  to start a second registration sequence will be blocked
       until the first one is completed by calling __pmProcessExec(3) or __pmProcessPipe.

SEE ALSO

       execvp(2), fork(2), pclose(2), pipe(2), popen(2), __pmProcessAddArg(3), __pmProcessExec(3)
       and waitpid(3).

DIAGNOSTICS

       If  successful  __pmProcessPipe returns 0.  Other conditions are rare (e.g. alloc failure)
       and are indicated by a return value that can be decoded using pmErrStr(3).

       The return status from __pmProcessPipeClose is a little more complicated.  If the  command
       completes  with  an  exit  status  of 0, the return value is 0.  Return values less than 0
       indicate a more serious error and the value can be  decoded  using  pmErrStr(3).   If  the
       command  was  executed,  but  did  not  exit  with status of 0 then the return value is an
       encoding of the waitpid(2) status as follows: 2000 if something unknown went  wrong,  else
       if  1000  +  signal number of the command was killed or stopped by a signal, else the exit
       status of the command.