pty_freebsd.go 756 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. package termios
  2. import (
  3. "fmt"
  4. "unsafe"
  5. )
  6. func posix_openpt(oflag int) (fd uintptr, err error) {
  7. // Copied from debian-golang-pty/pty_freebsd.go.
  8. r0, _, e1 := unix.Syscall(unix.SYS_POSIX_OPENPT, uintptr(oflag), 0, 0)
  9. fd = uintptr(r0)
  10. if e1 != 0 {
  11. err = e1
  12. }
  13. return
  14. }
  15. func open_pty_master() (uintptr, error) {
  16. return posix_openpt(unix.O_NOCTTY | unix.O_RDWR | unix.O_CLOEXEC)
  17. }
  18. func Ptsname(fd uintptr) (string, error) {
  19. var n uintptr
  20. err := ioctl(fd, unix.TIOCGPTN, uintptr(unsafe.Pointer(&n)))
  21. if err != nil {
  22. return "", err
  23. }
  24. return fmt.Sprintf("/dev/pts/%d", n), nil
  25. }
  26. func grantpt(fd uintptr) error {
  27. var n uintptr
  28. return ioctl(fd, unix.TIOCGPTN, uintptr(unsafe.Pointer(&n)))
  29. }
  30. func unlockpt(fd uintptr) error {
  31. return nil
  32. }