00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
#ifndef _PPIPECHANNEL
00103
#define _PPIPECHANNEL
00104
00105
#ifdef P_USE_PRAGMA
00106
#pragma interface
00107
#endif
00108
00109
00135 class PPipeChannel :
public PChannel
00136 {
00137
PCLASSINFO(
PPipeChannel,
PChannel);
00138
00139
public:
00142
00143 enum OpenMode {
00145
ReadOnly,
00147
WriteOnly,
00149
ReadWrite,
00152
ReadWriteStd
00153 };
00154
00157
PPipeChannel();
00163
PPipeChannel(
00164
const PString & subProgram,
00165 OpenMode mode = ReadWrite,
00166 BOOL searchPath = TRUE,
00167 BOOL stderrSeparate = FALSE
00168 );
00174
PPipeChannel(
00175
const PString & subProgram,
00176
const PStringArray & argumentList,
00177 OpenMode mode = ReadWrite,
00178 BOOL searchPath = TRUE,
00179 BOOL stderrSeparate = FALSE
00180 );
00186
PPipeChannel(
00187
const PString & subProgram,
00188
const PStringToString & environment,
00189 OpenMode mode = ReadWrite,
00190 BOOL searchPath = TRUE,
00191 BOOL stderrSeparate = FALSE
00192 );
00198
PPipeChannel(
00199
const PString & subProgram,
00200
const PStringArray & argumentList,
00201
const PStringToString & environment,
00202 OpenMode mode = ReadWrite,
00203 BOOL searchPath = TRUE,
00204 BOOL stderrSeparate = FALSE
00205 );
00206
00208
~PPipeChannel();
00210
00220 Comparison Compare(
00221
const PObject & obj
00222 )
const;
00224
00225
00233
virtual PString GetName() const;
00234
00251 virtual BOOL Read(
00252
void * buf,
00253 PINDEX len
00254 );
00255
00270 virtual BOOL Write(
00271 const
void * buf,
00272 PINDEX len
00273 );
00274
00283 virtual BOOL Close();
00285
00289 BOOL Open(
00290 const
PString & subProgram,
00291 OpenMode mode = ReadWrite,
00292 BOOL searchPath = TRUE,
00293 BOOL stderrSeparate = FALSE
00294 );
00296 BOOL Open(
00297 const
PString & subProgram,
00298 const
PStringArray & argumentList,
00299 OpenMode mode = ReadWrite,
00300 BOOL searchPath = TRUE,
00301 BOOL stderrSeparate = FALSE
00302 );
00304 BOOL Open(
00305 const
PString & subProgram,
00306 const
PStringToString & environment,
00307 OpenMode mode = ReadWrite,
00308 BOOL searchPath = TRUE,
00309 BOOL stderrSeparate = FALSE
00310 );
00348 BOOL Open(
00349 const
PString & subProgram,
00350 const
PStringArray & argumentList,
00351 const
PStringToString & environment,
00352 OpenMode mode = ReadWrite,
00353 BOOL searchPath = TRUE,
00354 BOOL stderrSeparate = FALSE
00355 );
00356
00362 const
PFilePath & GetSubProgram() const;
00363
00377 BOOL Execute();
00378
00387 BOOL IsRunning() const;
00388
00394
int GetReturnCode() const;
00395
00401
int WaitForTermination();
00402
00409
int WaitForTermination(
00410 const
PTimeInterval & timeout
00411 );
00412
00420 BOOL Kill(
00421
int signal = 9
00422 );
00423
00433 BOOL ReadStandardError(
00434
PString & errors,
00435 BOOL wait = FALSE
00436 );
00437
00444 static BOOL CanReadAndWrite();
00446
00447
00448 protected:
00449
00451 PFilePath subProgName;
00452
00453
00454 private:
00455 BOOL PlatformOpen(const
PString & subProgram,
00456 const
PStringArray & arguments,
00457 OpenMode mode,
00458 BOOL searchPath,
00459 BOOL stderrSeparate,
00460 const
PStringToString * environment);
00461
00462
00463
00464 #ifdef _WIN32
00465 #include "msos/ptlib/pipechan.h"
00466 #else
00467 #include "unix/ptlib/pipechan.h"
00468 #endif
00469 };
00470
00471 #endif
00472
00473