1 // PipedAppRunner.h 2 3 #ifndef PIPED_APP_RUNNER_H 4 #define PIPED_APP_RUNNER_H 5 6 #include <stdio.h> 7 8 #include <DataIO.h> 9 #include <Locker.h> 10 11 class PipedAppRunner { 12 public: 13 PipedAppRunner(); 14 ~PipedAppRunner(); 15 16 status_t Run(const char *command, const char *args = NULL, 17 bool findCommand = true); 18 bool HasQuitted(); 19 void WaitFor(); 20 21 status_t GetOutput(BString *buffer); 22 ssize_t ReadOutput(void *buffer, size_t size); 23 ssize_t ReadOutputAt(off_t position, void *buffer, size_t size); 24 25 private: 26 static int32 _ReaderEntry(void *data); 27 int32 _ReaderLoop(); 28 void _ClosePipe(); 29 30 private: 31 BLocker fOutputLock; 32 FILE *fPipe; 33 BMallocIO fOutput; 34 thread_id fReader; 35 }; 36 37 #endif // PIPED_APP_RUNNER_H 38