1 //! Terminal-related `ioctl` functions. 2 3 #![allow(unsafe_code)] 4 5 use crate::fd::AsFd; 6 use crate::{backend, io, ioctl}; 7 use backend::c; 8 9 /// `ioctl(fd, TIOCEXCL)`—Enables exclusive mode on a terminal. 10 /// 11 /// # References 12 /// - [Linux] 13 /// - [FreeBSD] 14 /// - [NetBSD] 15 /// - [OpenBSD] 16 /// 17 /// [Linux]: https://man7.org/linux/man-pages/man4/tty_ioctl.4.html 18 /// [FreeBSD]: https://man.freebsd.org/cgi/man.cgi?query=tty&sektion=4 19 /// [NetBSD]: https://man.netbsd.org/tty.4 20 /// [OpenBSD]: https://man.openbsd.org/tty.4 21 #[cfg(not(any(windows, target_os = "redox", target_os = "wasi")))] 22 #[inline] 23 #[doc(alias = "TIOCEXCL")] ioctl_tiocexcl<Fd: AsFd>(fd: Fd) -> io::Result<()>24 pub fn ioctl_tiocexcl<Fd: AsFd>(fd: Fd) -> io::Result<()> { 25 // SAFETY: TIOCEXCL is a no-argument setter opcode. 26 unsafe { 27 let ctl = ioctl::NoArg::<ioctl::BadOpcode<{ c::TIOCEXCL as _ }>>::new(); 28 ioctl::ioctl(fd, ctl) 29 } 30 } 31 32 /// `ioctl(fd, TIOCNXCL)`—Disables exclusive mode on a terminal. 33 /// 34 /// # References 35 /// - [Linux] 36 /// - [FreeBSD] 37 /// - [NetBSD] 38 /// - [OpenBSD] 39 /// 40 /// [Linux]: https://man7.org/linux/man-pages/man4/tty_ioctl.4.html 41 /// [FreeBSD]: https://man.freebsd.org/cgi/man.cgi?query=tty&sektion=4 42 /// [NetBSD]: https://man.netbsd.org/tty.4 43 /// [OpenBSD]: https://man.openbsd.org/tty.4 44 #[cfg(not(any(windows, target_os = "redox", target_os = "wasi")))] 45 #[inline] 46 #[doc(alias = "TIOCNXCL")] ioctl_tiocnxcl<Fd: AsFd>(fd: Fd) -> io::Result<()>47 pub fn ioctl_tiocnxcl<Fd: AsFd>(fd: Fd) -> io::Result<()> { 48 // SAFETY: TIOCNXCL is a no-argument setter opcode. 49 unsafe { 50 let ctl = ioctl::NoArg::<ioctl::BadOpcode<{ c::TIOCNXCL as _ }>>::new(); 51 ioctl::ioctl(fd, ctl) 52 } 53 } 54