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
00103
00104
00105
00106
00107
00108 #ifndef _PPIPECHANNEL
00109 #define _PPIPECHANNEL
00110
00111 #ifdef P_USE_PRAGMA
00112 #pragma interface
00113 #endif
00114
00115 #include <ptlib/channel.h>
00116
00117
00144 class PChannel;
00145
00146
00147 class PPipeChannel : public PChannel
00148 {
00149 PCLASSINFO(PPipeChannel, PChannel);
00150
00151 public:
00154
00155 enum OpenMode {
00157 ReadOnly,
00159 WriteOnly,
00161 ReadWrite,
00164 ReadWriteStd
00165 };
00166
00169 PPipeChannel();
00175 PPipeChannel(
00176 const PString & subProgram,
00177 OpenMode mode = ReadWrite,
00178 BOOL searchPath = TRUE,
00179 BOOL stderrSeparate = FALSE
00180 );
00186 PPipeChannel(
00187 const PString & subProgram,
00188 const PStringArray & argumentList,
00189 OpenMode mode = ReadWrite,
00190 BOOL searchPath = TRUE,
00191 BOOL stderrSeparate = FALSE
00192 );
00198 PPipeChannel(
00199 const PString & subProgram,
00200 const PStringToString & environment,
00201 OpenMode mode = ReadWrite,
00202 BOOL searchPath = TRUE,
00203 BOOL stderrSeparate = FALSE
00204 );
00210 PPipeChannel(
00211 const PString & subProgram,
00212 const PStringArray & argumentList,
00213 const PStringToString & environment,
00214 OpenMode mode = ReadWrite,
00215 BOOL searchPath = TRUE,
00216 BOOL stderrSeparate = FALSE
00217 );
00218
00220 ~PPipeChannel();
00222
00232 Comparison Compare(
00233 const PObject & obj
00234 ) const;
00236
00237
00245 virtual PString GetName() const;
00246
00263 virtual BOOL Read(
00264 void * buf,
00265 PINDEX len
00266 );
00267
00282 virtual BOOL Write(
00283 const void * buf,
00284 PINDEX len
00285 );
00286
00295 virtual BOOL Close();
00297
00301 BOOL Open(
00302 const PString & subProgram,
00303 OpenMode mode = ReadWrite,
00304 BOOL searchPath = TRUE,
00305 BOOL stderrSeparate = FALSE
00306 );
00308 BOOL Open(
00309 const PString & subProgram,
00310 const PStringArray & argumentList,
00311 OpenMode mode = ReadWrite,
00312 BOOL searchPath = TRUE,
00313 BOOL stderrSeparate = FALSE
00314 );
00316 BOOL Open(
00317 const PString & subProgram,
00318 const PStringToString & environment,
00319 OpenMode mode = ReadWrite,
00320 BOOL searchPath = TRUE,
00321 BOOL stderrSeparate = FALSE
00322 );
00360 BOOL Open(
00361 const PString & subProgram,
00362 const PStringArray & argumentList,
00363 const PStringToString & environment,
00364 OpenMode mode = ReadWrite,
00365 BOOL searchPath = TRUE,
00366 BOOL stderrSeparate = FALSE
00367 );
00368
00374 const PFilePath & GetSubProgram() const;
00375
00389 BOOL Execute();
00390
00399 BOOL IsRunning() const;
00400
00406 int GetReturnCode() const;
00407
00413 int WaitForTermination();
00414
00421 int WaitForTermination(
00422 const PTimeInterval & timeout
00423 );
00424
00432 BOOL Kill(
00433 int signal = 9
00434 );
00435
00445 BOOL ReadStandardError(
00446 PString & errors,
00447 BOOL wait = FALSE
00448 );
00449
00456 static BOOL CanReadAndWrite();
00458
00459
00460 protected:
00461
00463 PFilePath subProgName;
00464
00465
00466 private:
00467 BOOL PlatformOpen(const PString & subProgram,
00468 const PStringArray & arguments,
00469 OpenMode mode,
00470 BOOL searchPath,
00471 BOOL stderrSeparate,
00472 const PStringToString * environment);
00473
00474
00475
00476 #ifdef _WIN32
00477 #include "msos/ptlib/pipechan.h"
00478 #else
00479 #include "unix/ptlib/pipechan.h"
00480 #endif
00481 };
00482
00483 #endif
00484
00485