File: vdkchildtask.h

package info (click to toggle)
vdk2 2.4.0-5.6
  • links: PTS
  • area: main
  • in suites: bookworm
  • size: 6,448 kB
  • sloc: cpp: 26,950; sh: 10,942; ansic: 9,220; makefile: 605; perl: 113
file content (66 lines) | stat: -rw-r--r-- 1,479 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//
#ifndef _vdkchildtask_h
// put your code below here
#define _vdkchildtask_h

#include <vdk/vdkobj.h>
#include <vdk/value_sem_list.h>
#include <vdk/siglisthandle.h>
#include <vdk/vdkinchannel.h>
#define _GNU_SOURCE
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#include <sys/wait.h>

#define CHILD_TASK_DATA_SIGNAL (user_signal-1023)
#define CHILD_TASK_DIED_SIGNAL (user_signal-1022)

class VDKChildTask;

class VDKPid
{
  public:
  pid_t pid; 
  VDKChildTask* task;
  VDKPid (pid_t pid = (pid_t) -1,  VDKChildTask* task = NULL);
  ~VDKPid () {}
  bool operator == (VDKPid& p)
    { return (pid ==  p.pid); }
  bool operator < (VDKPid& p)
    { return (pid <  p.pid); }
  
};

typedef VDKValueList <VDKPid> PIDLIST;
typedef VDKValueListIterator <VDKPid> PidListIterator;

class VDKChildTask: public VDKObject
{
  private:
    char* data_buffer;
    static void reaper(int);
    static void plumber(int);
    pid_t  pid;
    int xmit;
    static PIDLIST PidList;
  protected:
    bool DoIO (VDKObject*);

  public: 
  VDKChildTask (VDKForm* owner);
  virtual ~VDKChildTask ();
  pid_t StartChild (char* args[],  bool duplex = false);
  char* GetData () { return data_buffer; }
  bool SendData (char* buffer);
  // hopefully converted into properties
  inline int Pid() {return pid;}
  inline void Pid(int p) {pid = p;}
  inline int Xmit() {return pid;}
  inline void Xmit(int x) {xmit = x;}
  DECLARE_SIGNAL_LIST (VDKChildTask);
  };
// 
#endif