GNU Octave  3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
kpty.h
Go to the documentation of this file.
1 /* This file is part of the KDE libraries
2 
3  Copyright (C) 2003, 2007, 2013 Oswald Buddenhagen <[email protected]>
4 
5  Rewritten for QT4 by e_k <e_k at users.sourceforge.net>, Copyright (C)2008
6 
7  This library is free software; you can redistribute it and/or
8  modify it under the terms of the GNU Library General Public
9  License as published by the Free Software Foundation; either
10  version 2 of the License, or (at your option) any later version.
11 
12  This library is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  Library General Public License for more details.
16 
17  You should have received a copy of the GNU Library General Public License
18  along with this library; see the file COPYING.LIB. If not, write to
19  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  Boston, MA 02110-1301, USA.
21 */
22 
23 #ifndef kpty_h
24 #define kpty_h
25 
26 #include <QtCore>
27 
28 struct KPtyPrivate;
29 struct termios;
30 
31 /**
32  * Provides primitives for opening & closing a pseudo TTY pair, assigning the
33  * controlling TTY, utmp registration and setting various terminal attributes.
34  */
35 class KPty {
36  Q_DECLARE_PRIVATE(KPty)
37 
38 public:
39 
40  /**
41  * Constructor
42  */
43  KPty();
44  KPty(int masterFd, int slaveFd);
45 
46  /**
47  * Destructor:
48  *
49  * If the pty is still open, it will be closed. Note, however, that
50  * an utmp registration is @em not undone.
51  */
52  ~KPty();
53 
54  /**
55  * Create a pty master/slave pair.
56  *
57  * @return true if a pty pair was successfully opened
58  */
59  bool open();
60 
61  /**
62  * Close the pty master/slave pair.
63  */
64  void close();
65 
66  /**
67  * Close the pty slave descriptor.
68  *
69  * When creating the pty, KPty also opens the slave and keeps it open.
70  * Consequently the master will never receive an EOF notification.
71  * Usually this is the desired behavior, as a closed pty slave can be
72  * reopened any time - unlike a pipe or socket. However, in some cases
73  * pipe-alike behavior might be desired.
74  *
75  * After this function was called, slaveFd() and setCTty() cannot be
76  * used.
77  */
78  void closeSlave();
79 
80  /**
81  * Wrapper around tcgetattr(3).
82  *
83  * This function can be used only while the PTY is open.
84  * You will need an #include &lt;termios.h&gt; to do anything useful
85  * with it.
86  *
87  * @param ttmode a pointer to a termios structure.
88  * Note: when declaring ttmode, @c struct @c ::termios must be used -
89  * without the '::' some version of HP-UX thinks, this declares
90  * the struct in your class, in your method.
91  * @return @c true on success, false otherwise
92  */
93  bool tcGetAttr(struct ::termios *ttmode) const;
94 
95  /**
96  * Wrapper around tcsetattr(3) with mode TCSANOW.
97  *
98  * This function can be used only while the PTY is open.
99  *
100  * @param ttmode a pointer to a termios structure.
101  * @return @c true on success, false otherwise. Note that success means
102  * that @em at @em least @em one attribute could be set.
103  */
104  bool tcSetAttr(struct ::termios *ttmode);
105 
106  /**
107  * Change the logical (screen) size of the pty.
108  * The default is 24 lines by 80 columns.
109  *
110  * This function can be used only while the PTY is open.
111  *
112  * @param lines the number of rows
113  * @param columns the number of columns
114  * @return @c true on success, false otherwise
115  */
116  bool setWinSize(int lines, int columns);
117 
118  /**
119  * Set whether the pty should echo input.
120  *
121  * Echo is on by default.
122  * If the output of automatically fed (non-interactive) PTY clients
123  * needs to be parsed, disabling echo often makes it much simpler.
124  *
125  * This function can be used only while the PTY is open.
126  *
127  * @param echo true if input should be echoed.
128  * @return @c true on success, false otherwise
129  */
130  bool setEcho(bool echo);
131 
132  /**
133  * @return the name of the slave pty device.
134  *
135  * This function should be called only while the pty is open.
136  */
137  const char *ttyName() const;
138 
139  /**
140  * @return the file descriptor of the master pty
141  *
142  * This function should be called only while the pty is open.
143  */
144  int masterFd() const;
145 
146  /**
147  * @return the file descriptor of the slave pty
148  *
149  * This function should be called only while the pty slave is open.
150  */
151  int slaveFd() const;
152 
153 protected:
154  /**
155  * @internal
156  */
157  KPty(KPtyPrivate *d);
158 
159  /**
160  * @internal
161  */
163 };
164 
165 #endif
166