124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- PseudoTerminal.h ----------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_PseudoTerminal_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_PseudoTerminal_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#if defined(__cplusplus) 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <fcntl.h> 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <string> 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-defines.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_utility { 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @class PseudoTerminal PseudoTerminal.h "lldb/Core/PseudoTerminal.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// @brief A pseudo terminal helper class. 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// The pseudo terminal class abtracts the use of pseudo terminals on 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner/// the host system. 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//---------------------------------------------------------------------- 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass PseudoTerminal 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner enum 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3496f5ac65fe54bae98f8d5ce11553c14e1885476eEli Friedman invalid_fd = -1 ///< Invalid file descriptor value 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner }; 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Default constructor 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Constructs this object with invalid master and slave file 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// descriptors. 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner PseudoTerminal (); 4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Destructor 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The destructor will close the master and slave file descriptors 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if they are valid and ownwership has not been released using 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// one of: 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li PseudoTerminal::ReleaseMasterFileDescriptor() 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li PseudoTerminal::ReleaseSaveFileDescriptor() 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~PseudoTerminal (); 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Close the master file descriptor if it is valid. 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CloseMasterFileDescriptor (); 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Close the slave file descriptor if it is valid. 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CloseSlaveFileDescriptor (); 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Fork a child process that uses pseudo terminals for its stdio. 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// In the parent process, a call to this function results in a pid 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// being returned. If the pid is valid, the master file descriptor 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can be used for read/write access to stdio of the child process. 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// In the child process the stdin/stdout/stderr will already be 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// routed to the slave pseudo terminal and the master file 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// descriptor will be closed as it is no longer needed by the child 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// process. 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This class will close the file descriptors for the master/slave 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// when the destructor is called. The file handles can be released 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// using either: 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li PseudoTerminal::ReleaseMasterFileDescriptor() 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li PseudoTerminal::ReleaseSaveFileDescriptor() 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] error 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// An pointer to an error that can describe any errors that 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// occur. This can be NULL if no error status is desired. 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li \b Parent process: a child process ID that is greater 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// than zero, or -1 if the fork fails. 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li \b Child process: zero. 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 95d9919d3f46c5069eef065a27f96abc021330d5f3Greg Clayton lldb::pid_t 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Fork (char *error_str, size_t error_len); 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The master file descriptor accessor. 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This object retains ownership of the master file descriptor when 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this accessor is used. Users can call the member function 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// PseudoTerminal::ReleaseMasterFileDescriptor() if this 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// object should release ownership of the slave file descriptor. 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The master file descriptor, or PseudoTerminal::invalid_fd 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if the master file descriptor is not currently valid. 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see PseudoTerminal::ReleaseMasterFileDescriptor() 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetMasterFileDescriptor () const; 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The slave file descriptor accessor. 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// This object retains ownership of the slave file descriptor when 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this accessor is used. Users can call the member function 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// PseudoTerminal::ReleaseSlaveFileDescriptor() if this 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// object should release ownership of the slave file descriptor. 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The slave file descriptor, or PseudoTerminal::invalid_fd 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if the slave file descriptor is not currently valid. 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see PseudoTerminal::ReleaseSlaveFileDescriptor() 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSlaveFileDescriptor () const; 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Get the name of the slave pseudo terminal. 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A master pseudo terminal should already be valid prior to 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// calling this function. 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] error 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// An pointer to an error that can describe any errors that 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// occur. This can be NULL if no error status is desired. 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The name of the slave pseudo terminal as a NULL terminated 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// C. This string that comes from static memory, so a copy of 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// the string should be made as subsequent calls can change 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// this value. NULL is returned if this object doesn't have 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// a valid master pseudo terminal opened or if the call to 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// \c ptsname() fails. 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see PseudoTerminal::OpenFirstAvailableMaster() 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char* 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSlaveName (char *error_str, size_t error_len) const; 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Open the first available pseudo terminal. 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Opens the first available pseudo terminal with \a oflag as the 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// permissions. The opened master file descriptor is stored in this 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// object and can be accessed by calling the 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// PseudoTerminal::GetMasterFileDescriptor() accessor. Clients 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can call the PseudoTerminal::ReleaseMasterFileDescriptor() 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// accessor function if they wish to use the master file descriptor 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// beyond the lifespan of this object. 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If this object still has a valid master file descriptor when its 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// destructor is called, it will close it. 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] oflag 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Flags to use when calling \c posix_openpt(\a oflag). 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A value of "O_RDWR|O_NOCTTY" is suggested. 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] error 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// An pointer to an error that can describe any errors that 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// occur. This can be NULL if no error status is desired. 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li \b true when the a master files descriptor is 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// successfully opened. 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li \b false if anything goes wrong. 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see PseudoTerminal::GetMasterFileDescriptor() 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see PseudoTerminal::ReleaseMasterFileDescriptor() 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OpenFirstAvailableMaster (int oflag, char *error_str, size_t error_len); 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Open the slave for the current master pseudo terminal. 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// A master pseudo terminal should already be valid prior to 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// calling this function. The opened slave file descriptor is 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// stored in this object and can be accessed by calling the 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// PseudoTerminal::GetSlaveFileDescriptor() accessor. Clients 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// can call the PseudoTerminal::ReleaseSlaveFileDescriptor() 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// accessor function if they wish to use the slave file descriptor 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// beyond the lifespan of this object. 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// If this object still has a valid slave file descriptor when its 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// destructor is called, it will close it. 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[in] oflag 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Flags to use when calling \c open(\a oflag). 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @param[out] error 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// An pointer to an error that can describe any errors that 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// occur. This can be NULL if no error status is desired. 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li \b true when the a master files descriptor is 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// successfully opened. 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @li \b false if anything goes wrong. 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see PseudoTerminal::OpenFirstAvailableMaster() 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see PseudoTerminal::GetSlaveFileDescriptor() 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @see PseudoTerminal::ReleaseSlaveFileDescriptor() 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner OpenSlave (int oflag, char *error_str, size_t error_len); 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Release the master file descriptor. 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Releases ownership of the master pseudo terminal file descriptor 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// without closing it. The destructor for this class will close the 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// master file descriptor if the ownership isn't released using this 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// call and the master file descriptor has been opened. 22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The master file descriptor, or PseudoTerminal::invalid_fd 23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if the mast file descriptor is not currently valid. 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ReleaseMasterFileDescriptor (); 23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Release the slave file descriptor. 23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// Release ownership of the slave pseudo terminal file descriptor 24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// without closing it. The destructor for this class will close the 24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// slave file descriptor if the ownership isn't released using this 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// call and the slave file descriptor has been opened. 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// @return 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// The slave file descriptor, or PseudoTerminal::invalid_fd 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner /// if the slave file descriptor is not currently valid. 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ReleaseSlaveFileDescriptor (); 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Member variables 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int m_master_fd; ///< The file descriptor for the master. 25624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int m_slave_fd; ///< The file descriptor for the slave. 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DISALLOW_COPY_AND_ASSIGN (PseudoTerminal); 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // #if defined(__cplusplus) 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // #ifndef liblldb_PseudoTerminal_h_ 267