func ioctl(fd, request, argp uintptr) error { return unix.IoctlSetInt(int(fd), int(request), int(argp)) }
// Open opens an asynchronous communications port. func Open(name string, options ...func(*Term) error) (*Term, error) { fd, e := syscall.Open(name, syscall.O_NOCTTY|syscall.O_CLOEXEC|syscall.O_NDELAY|syscall.O_RDWR, 0666) if e != nil { return nil, &os.PathError{"open", name, e} } modules := [2]string{"ptem", "ldterm"} for _, mod := range modules { err := unix.IoctlSetInt(fd, C.I_PUSH, int(uintptr(unsafe.Pointer(syscall.StringBytePtr(mod))))) if err != nil { return nil, err } } t := Term{name: name, fd: fd} termios.Tcgetattr(uintptr(t.fd), &t.orig) if err := termios.Tcgetattr(uintptr(t.fd), &t.orig); err != nil { return nil, err } if err := t.SetOption(options...); err != nil { return nil, err } return &t, syscall.SetNonblock(t.fd, false) }
func setForegroundGroup(fd, group int) { unix.IoctlSetInt(fd, unix.TIOCSPGRP, group) }