edelib 2.1.0
PtyProcess Class Reference

Synchronous communication with tty programs. More...

#include <edelib/PtyProcess.h>

Public Types

enum  CheckPidStatus { Error =-1 , NotExited =-2 , Killed =-3 , Crashed =-4 }
 

Public Member Functions

 PtyProcess ()
 
virtual ~PtyProcess ()
 
int exec (const char *command, const char **args)
 
char * read_line (bool block=true)
 
void write_line (const char *line, bool addNewline=true)
 
void unread_line (const char *line, bool addNewline=true)
 
void set_exit_string (char *exit)
 
int wait_for_child ()
 
int wait_slave ()
 
int enable_local_echo (bool enable=true)
 
void set_terminal (bool terminal)
 
void set_erase (bool erase)
 
void set_environment (const char **env)
 
int fd () const
 
int pid () const
 
void terminate_child ()
 

Static Public Member Functions

static int wait_ms (int fd, int ms)
 
static bool check_pid (pid_t pid)
 
static int check_pid_exited (pid_t pid)
 

Detailed Description

Synchronous communication with tty programs.

PtyProcess provides synchronous communication with tty based programs. The communications channel used is a pseudo tty (as opposed to a pipe) This means that programs which require a terminal will work.

Member Enumeration Documentation

◆ CheckPidStatus

Check process exit status for process pid. On error (no child, no exit), return -1. If child pid has exited, return its exit status, (which may be zero). If child has not exited, return -2.

Constructor & Destructor Documentation

◆ PtyProcess()

Empty constructor

◆ ~PtyProcess()

virtual ~PtyProcess ( )
virtual

Clears data

Member Function Documentation

◆ check_pid()

static bool check_pid ( pid_t pid)
static

Basic check for the existence of pid. Returns true iff pid is an extant process, (one you could kill - see man kill(2) for signal 0).

◆ check_pid_exited()

static int check_pid_exited ( pid_t pid)
static

Check process exit status for process pid. On error (no child, no exit), return Error (-1). If child pid has exited, return its exit status, (which may be zero). If child has not exited, return NotExited (-2).

◆ enable_local_echo()

int enable_local_echo ( bool enable = true)

Enables/disables local echo on the pseudo tty.

◆ exec()

int exec ( const char * command,
const char ** args )

Forks off and execute a command. The command's standard in and output are connected to the pseudo tty. They are accessible with readLine and writeLine.

Parameters
commandThe command to execute.
argsThe arguments to the command.

◆ fd()

int fd ( ) const
inline

Returns the filedescriptor of the process

◆ pid()

int pid ( ) const
inline

Returns the pid of the process

◆ read_line()

char * read_line ( bool block = true)

Reads a line from the program's standard out. Depending on the block parameter, this call blocks until a single, full line is read.

Parameters
blockBlock until a full line is read?
Returns
The output string.

◆ set_environment()

void set_environment ( const char ** env)

Set additinal environment variables

◆ set_erase()

void set_erase ( bool erase)
inline

Overwrites the password as soon as it is used. Relevant only to some subclasses

◆ set_exit_string()

void set_exit_string ( char * exit)
inline

Sets the exit string. If a line of program output matches this, waitForChild() will terminate the program and return.

◆ set_terminal()

void set_terminal ( bool terminal)
inline

Enables/disables terminal output. Relevant only to some subclasses

◆ terminate_child()

void terminate_child ( )

Terminate the child process if still running

◆ unread_line()

void unread_line ( const char * line,
bool addNewline = true )

Puts back a line of input.

Parameters
lineThe line to put back.
addNewlineAdds a '
' to the line.

◆ wait_for_child()

int wait_for_child ( )

Waits for the child to exit

◆ wait_ms()

static int wait_ms ( int fd,
int ms )
static

Wait ms miliseconds (ie. 1/10th of a second is 100ms), using fd as a filedescriptor to wait on. Returns select(2)'s result, which is -1 on error, 0 on timeout, or positive if there is data on one of the selected fd's.

ms must be in the range 0..999 (ie. the maximum wait duration is 999ms, almost one second).

◆ wait_slave()

int wait_slave ( )

Waits until the pty has cleared the ECHO flag. This is useful when programs write a password prompt before they disable ECHO. Disabling it might flush any input that was written.

◆ write_line()

void write_line ( const char * line,
bool addNewline = true )

Writes a line of text to the program's standard in.

Parameters
lineThe text to write.
addNewlineAdds a '
' to the line.

The documentation for this class was generated from the following file: