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