10 func open() (pty, tty *os.File, err error) {
11 p, err := os.OpenFile("/dev/ptmx", os.O_RDWR, 0)
16 sname, err := ptsname(p)
26 t, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0)
33 func ptsname(f *os.File) (string, error) {
35 err := ioctl(f.Fd(), syscall.TIOCGPTN, uintptr(unsafe.Pointer(&n)))
39 return "/dev/pts/" + strconv.Itoa(int(n)), nil
42 func unlockpt(f *os.File) error {
44 // use TIOCSPTLCK with a zero valued arg to clear the slave pty lock
45 return ioctl(f.Fd(), syscall.TIOCSPTLCK, uintptr(unsafe.Pointer(&u)))