123456789101112131415161718192021222324252627282930313233 |
- package pty
- import (
- "os"
- "syscall"
- "unsafe"
- )
- func open() (pty, tty *os.File, err error) {
- /*
- * from ptm(4):
- * The PTMGET command allocates a free pseudo terminal, changes its
- * ownership to the caller, revokes the access privileges for all previous
- * users, opens the file descriptors for the pty and tty devices and
- * returns them to the caller in struct ptmget.
- */
- p, err := os.OpenFile("/dev/ptm", os.O_RDWR|syscall.O_CLOEXEC, 0)
- if err != nil {
- return nil, nil, err
- }
- defer p.Close()
- var ptm ptmget
- if err := ioctl(p.Fd(), uintptr(ioctl_PTMGET), uintptr(unsafe.Pointer(&ptm))); err != nil {
- return nil, nil, err
- }
- pty = os.NewFile(uintptr(ptm.Cfd), "/dev/ptm")
- tty = os.NewFile(uintptr(ptm.Sfd), "/dev/ptm")
- return pty, tty, nil
- }
|