aboutsummaryrefslogtreecommitdiff
path: root/src/process.h
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2009-12-21 17:56:32 +0000
committerMike Buland <eichlan@xagasoft.com>2009-12-21 17:56:32 +0000
commit184669188717673c4cb36698192fe8c14aa3af68 (patch)
treea91583c0e383a38852d6b64f3bebd5778630c0bb /src/process.h
parent5399dd17a944464ced0c8618c46a367e4188d29b (diff)
downloadlibbu++-184669188717673c4cb36698192fe8c14aa3af68.tar.gz
libbu++-184669188717673c4cb36698192fe8c14aa3af68.tar.bz2
libbu++-184669188717673c4cb36698192fe8c14aa3af68.tar.xz
libbu++-184669188717673c4cb36698192fe8c14aa3af68.zip
Ok, Process has been updated. You now must specify flags as the first parameter
of both constructors, this allows you to control which streams to bind to. To preserve the old behaviour, simply put Bu::Process::StdOut before your old first parameters.
Diffstat (limited to 'src/process.h')
-rw-r--r--src/process.h51
1 files changed, 48 insertions, 3 deletions
diff --git a/src/process.h b/src/process.h
index e04bb59..843ead1 100644
--- a/src/process.h
+++ b/src/process.h
@@ -24,8 +24,16 @@ namespace Bu
24 class Process : public Bu::Stream 24 class Process : public Bu::Stream
25 { 25 {
26 public: 26 public:
27 Process( const char *sName, char *const argv[] ); 27 enum Flags
28 Process( const char *sName, const char *argv, ...); 28 {
29 StdOut = 0x01,
30 StdErr = 0x02,
31 Both = 0x03
32 };
33
34 public:
35 Process( Flags eFlags, const char *sName, char *const argv[] );
36 Process( Flags eFlags, const char *sName, const char *argv, ...);
29 virtual ~Process(); 37 virtual ~Process();
30 38
31 virtual void close(); 39 virtual void close();
@@ -53,6 +61,11 @@ namespace Bu
53 virtual bool isBlocking(); 61 virtual bool isBlocking();
54 virtual void setBlocking( bool bBlocking=true ); 62 virtual void setBlocking( bool bBlocking=true );
55 63
64 void select( bool &bStdOut, bool &bStdErr );
65
66 bool isRunning();
67 void ignoreStdErr();
68
56 /** 69 /**
57 * Returns the pid of the child process, or zero if there is no 70 * Returns the pid of the child process, or zero if there is no
58 * currently running child. Note that a read operation must be 71 * currently running child. Note that a read operation must be
@@ -60,13 +73,45 @@ namespace Bu
60 */ 73 */
61 pid_t getPid(); 74 pid_t getPid();
62 75
76 /**
77 * Returns true if the child exited normally (by calling exit or
78 * returning from main).
79 */
80 bool childExited();
81
82 /**
83 * Returns the 8 bit integer value returned from the child program if
84 * childExited returned true.
85 */
86 int childExitStatus();
87
88 /**
89 * Returns true if the child exited because of a signal.
90 */
91 bool childSignaled();
92
93 /**
94 * Returns the signal ID if the childSignaled return true.
95 */
96 int childSignal();
97
98 /**
99 * Returns true if the child left a core dump behind when it exited.
100 */
101 bool childCoreDumped();
102
63 private: 103 private:
64 int iStdIn; 104 int iStdIn;
65 int iStdOut; 105 int iStdOut;
66 int iStdErr; 106 int iStdErr;
67 pid_t iPid; 107 pid_t iPid;
108 int iProcStatus;
109 bool bBlocking;
110 bool bStdOutEos;
111 bool bStdErrEos;
68 112
69 void gexec( const char *sName, char *const argv[] ); 113 void gexec( Flags eFlags, const char *sName, char *const argv[] );
114 void checkClose();
70 }; 115 };
71} 116}
72 117