173 lines
5.6 KiB
C
173 lines
5.6 KiB
C
/*=========================================================================
|
|
|
|
Program: KWSys - Kitware System Library
|
|
Module: $RCSfile$
|
|
Language: C++
|
|
Date: $Date$
|
|
Version: $Revision$
|
|
|
|
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
|
|
See http://www.cmake.org/HTML/Copyright.html for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notices for more information.
|
|
|
|
=========================================================================*/
|
|
#ifndef @KWSYS_NAMESPACE@_Process_h
|
|
#define @KWSYS_NAMESPACE@_Process_h
|
|
|
|
#define kwsys(x) @KWSYS_NAMESPACE@##x
|
|
#define kwsysProcess_STDOUT kwsys(Process_STDOUT)
|
|
#define kwsysProcess_STDERR kwsys(Process_STDERR)
|
|
#define kwsysProcess_Timeout kwsys(Process_Timeout)
|
|
#define kwsysProcess_Starting kwsys(Process_Starting)
|
|
#define kwsysProcess_Executing kwsys(Process_Executing)
|
|
#define kwsysProcess_Expired kwsys(Process_Expired)
|
|
#define kwsysProcess_Exited kwsys(Process_Exited)
|
|
#define kwsysProcess_Killed kwsys(Process_Killed)
|
|
#define kwsysProcess_Signalled kwsys(Process_Signalled)
|
|
#define kwsysProcess_Error kwsys(Process_Error)
|
|
#define kwsysProcess_State kwsys(Process_State)
|
|
#define kwsysProcess_Pipes_e kwsys(Process_Pipes_e)
|
|
#define kwsysProcess_State_e kwsys(Process_State_e)
|
|
#define kwsysProcess_s kwsys(Process_s)
|
|
#define kwsysProcess kwsys(Process)
|
|
#define kwsysProcess_New kwsys(Process_New)
|
|
#define kwsysProcess_Delete kwsys(Process_Delete)
|
|
#define kwsysProcess_SetCommand kwsys(Process_SetCommand)
|
|
#define kwsysProcess_SetTimeout kwsys(Process_SetTimeout)
|
|
#define kwsysProcess_GetState kwsys(Process_GetState)
|
|
#define kwsysProcess_GetExitCode kwsys(Process_GetExitCode)
|
|
#define kwsysProcess_GetErrorString kwsys(Process_GetErrorString)
|
|
#define kwsysProcess_Execute kwsys(Process_Execute)
|
|
#define kwsysProcess_WaitForData kwsys(Process_WaitForData)
|
|
#define kwsysProcess_WaitForExit kwsys(Process_WaitForExit)
|
|
#define kwsysProcess_Kill kwsys(Process_Kill)
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
typedef enum kwsysProcess_Pipes_e
|
|
{
|
|
kwsysProcess_STDOUT=1,
|
|
kwsysProcess_STDERR=2,
|
|
kwsysProcess_Timeout=255
|
|
} kwsysProcess_Pipes;
|
|
|
|
typedef enum kwsysProcess_State_e
|
|
{
|
|
kwsysProcess_Starting, /* Between New and Execute; No process run yet */
|
|
kwsysProcess_Executing, /* Process is running */
|
|
kwsysProcess_Expired, /* Process timeout expired and was killed */
|
|
kwsysProcess_Exited, /* Process exited */
|
|
kwsysProcess_Killed, /* Process was killed by Kill */
|
|
kwsysProcess_Signalled, /* Process was terminated by a signal (crash / ctrl-C) */
|
|
kwsysProcess_Error /* Internal error of Process */
|
|
} kwsysProcess_State;
|
|
|
|
typedef struct kwsysProcess_s kwsysProcess;
|
|
|
|
kwsysProcess* kwsysProcess_New();
|
|
|
|
void kwsysProcess_Delete(kwsysProcess* cp);
|
|
|
|
void kwsysProcess_SetCommand(kwsysProcess* cp, char const* const* command);
|
|
|
|
void kwsysProcess_SetTimeout(kwsysProcess* cp, double timeout);
|
|
|
|
/*
|
|
* Get the current internal state of the kwsysProcess instance
|
|
*/
|
|
int kwsysProcess_GetState(kwsysProcess* cp);
|
|
|
|
/*
|
|
* Get process return code or when signalled, get the signal code
|
|
*/
|
|
int kwsysProcess_GetExitCode(kwsysProcess* cp);
|
|
|
|
/*
|
|
* On kwsysProcess_Error get the error message
|
|
*/
|
|
const char* kwsysProcess_GetErrorString(kwsysProcess* cp);
|
|
|
|
void kwsysProcess_Execute(kwsysProcess* cp);
|
|
|
|
/*
|
|
* Block until data available on requested pipe or one of the timeouts expired,
|
|
* or the process exits. If the pipe is not specified, data on that pipe are
|
|
* ignored.
|
|
*
|
|
* pipes - a list of interested pipes - kwsysProcess_STDOUT | kwsysProcess_STDERR
|
|
* data - returns pointer to data if read, NULL otherwise
|
|
* length - length of the returned data
|
|
* userTimeout - timeout for the current kwsysProcess_WaitForData call
|
|
* the userTimeout will contain the remaining time
|
|
*
|
|
* Returns:
|
|
* 0 - Process exited or killed or process timeout expired with no data
|
|
* available, or no process running.
|
|
* PIPE id otherwise:
|
|
* kwsysProcess_STDOUT - if stdout is returned
|
|
* kwsysProcess_STDERR - if stderr is returned
|
|
* kwsysProcess_Timeout - if user timeout expired
|
|
*/
|
|
int kwsysProcess_WaitForData(kwsysProcess* cp, int pipes, char** data, int* length,
|
|
double* userTimeout);
|
|
|
|
/*
|
|
* Block until the process exits or the timeout expires. If no process is
|
|
* running, return immediatly.
|
|
*
|
|
* Returns:
|
|
* 0 - When user timeout expires
|
|
* 1 - Otherwise
|
|
*/
|
|
int kwsysProcess_WaitForExit(kwsysProcess* cp, double* userTimeout);
|
|
|
|
/*
|
|
* Kills the process. kwsysProcess_WaitForExit should still be called
|
|
* after kwsysProcess_Kill.
|
|
*/
|
|
void kwsysProcess_Kill(kwsysProcess* cp);
|
|
|
|
#if defined(__cplusplus)
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
|
|
/* If we are building a kwsysProcess .c file, let it use these macros. */
|
|
#if !defined(KWSYS_IN_PROCESS_C)
|
|
# undef kwsys
|
|
# undef kwsysProcess_STDOUT
|
|
# undef kwsysProcess_STDERR
|
|
# undef kwsysProcess_Timeout
|
|
# undef kwsysProcess_Starting
|
|
# undef kwsysProcess_Executing
|
|
# undef kwsysProcess_Expired
|
|
# undef kwsysProcess_Exited
|
|
# undef kwsysProcess_Killed
|
|
# undef kwsysProcess_Signalled
|
|
# undef kwsysProcess_Error
|
|
# undef kwsysProcess_State
|
|
# undef kwsysProcess_Pipes_e
|
|
# undef kwsysProcess_State_e
|
|
# undef kwsysProcess_s
|
|
# undef kwsysProcess
|
|
# undef kwsysProcess_New
|
|
# undef kwsysProcess_Delete
|
|
# undef kwsysProcess_SetCommand
|
|
# undef kwsysProcess_SetTimeout
|
|
# undef kwsysProcess_GetState
|
|
# undef kwsysProcess_GetExitCode
|
|
# undef kwsysProcess_GetErrorString
|
|
# undef kwsysProcess_Execute
|
|
# undef kwsysProcess_WaitForData
|
|
# undef kwsysProcess_WaitForExit
|
|
# undef kwsysProcess_Kill
|
|
#endif
|
|
|
|
#endif
|