xref: /haiku/src/tests/kits/app/common/PipedAppRunner.h (revision 21258e2674226d6aa732321b6f8494841895af5f)
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