-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpty_linux.go
34 lines (32 loc) · 872 Bytes
/
pty_linux.go
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
package serial
// OpenPTY finds an available pseudoterminal and returns a master and slave port.
// If termp is non-nil, the slave port will be configured with the given termios.
// If winp is non-nil, the slave port will be configured with the given window size.
func OpenPTY(termp *Termios, winp *Winsize) (*Port, *Port, error) {
master, err := Open("/dev/ptmx", nil)
if err != nil {
return nil, nil, err
}
if err := master.SetLockPT(false); err != nil {
master.Close()
return nil, nil, err
}
slave, err := master.GetPTPeer(0)
if err != nil {
master.Close()
return nil, nil, err
}
if termp != nil {
if err := slave.SetAttr(TCSANOW, termp); err != nil {
master.Close()
return nil, nil, err
}
}
if winp != nil {
if err := slave.SetWinSize(winp); err != nil {
master.Close()
return nil, nil, err
}
}
return master, slave, nil
}