00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __WVPTY_H
00011 #define __WVPTY_H
00012
00013 #include "wvfdstream.h"
00014 #include "wvtr1.h"
00015
00016 class WvPty: public WvFDStream
00017 {
00018 private:
00019 WvString _master, _slave;
00020 pid_t _pid;
00021 int _exit_status;
00022
00023 static bool open_pty(WvString &master, int &master_fd,
00024 WvString &slave, int &slave_fd);
00025
00026 void monitor_child(bool wait);
00027
00028 public:
00029 typedef wv::function<bool(WvPty&)> Callback;
00030
00031 Callback pre_exec_cb;
00032 Callback post_exec_cb;
00033
00034 WvPty(const char *program, const char * const *argv,
00035 Callback _pre_exec_cb = Callback(),
00036 Callback _post_exec_cb = Callback());
00037
00038 void kill(int signum);
00039 bool child_exited();
00040 bool child_killed();
00041 int finish();
00042 int exit_status();
00043
00044 const char *master() const
00045 { return _master; }
00046 const char *slave() const
00047 { return _slave; }
00048 pid_t pid() const
00049 { return _pid; }
00050
00051 const char *wstype() const { return "WvPty"; }
00052 };
00053
00054 #endif // __WVPTY_H