1b8a62b91Sopenharmony_ci//! The Unix `ioctl` function is effectively lots of different functions 2b8a62b91Sopenharmony_ci//! hidden behind a single dynamic dispatch interface. In order to provide 3b8a62b91Sopenharmony_ci//! a type-safe API, rustix makes them all separate functions so that they 4b8a62b91Sopenharmony_ci//! can have dedicated static type signatures. 5b8a62b91Sopenharmony_ci 6b8a62b91Sopenharmony_ciuse crate::{backend, io}; 7b8a62b91Sopenharmony_ciuse backend::fd::AsFd; 8b8a62b91Sopenharmony_ci 9b8a62b91Sopenharmony_ci/// `ioctl(fd, TIOCEXCL)`—Enables exclusive mode on a terminal. 10b8a62b91Sopenharmony_ci/// 11b8a62b91Sopenharmony_ci/// # References 12b8a62b91Sopenharmony_ci/// - [Linux] 13b8a62b91Sopenharmony_ci/// 14b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man4/tty_ioctl.4.html 15b8a62b91Sopenharmony_ci#[cfg(not(any(windows, target_os = "haiku", target_os = "redox", target_os = "wasi")))] 16b8a62b91Sopenharmony_ci#[inline] 17b8a62b91Sopenharmony_ci#[doc(alias = "TIOCEXCL")] 18b8a62b91Sopenharmony_cipub fn ioctl_tiocexcl<Fd: AsFd>(fd: Fd) -> io::Result<()> { 19b8a62b91Sopenharmony_ci backend::io::syscalls::ioctl_tiocexcl(fd.as_fd()) 20b8a62b91Sopenharmony_ci} 21b8a62b91Sopenharmony_ci 22b8a62b91Sopenharmony_ci/// `ioctl(fd, TIOCNXCL)`—Disables exclusive mode on a terminal. 23b8a62b91Sopenharmony_ci/// 24b8a62b91Sopenharmony_ci/// # References 25b8a62b91Sopenharmony_ci/// - [Linux] 26b8a62b91Sopenharmony_ci/// 27b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man4/tty_ioctl.4.html 28b8a62b91Sopenharmony_ci#[cfg(not(any(windows, target_os = "haiku", target_os = "redox", target_os = "wasi")))] 29b8a62b91Sopenharmony_ci#[inline] 30b8a62b91Sopenharmony_ci#[doc(alias = "TIOCNXCL")] 31b8a62b91Sopenharmony_cipub fn ioctl_tiocnxcl<Fd: AsFd>(fd: Fd) -> io::Result<()> { 32b8a62b91Sopenharmony_ci backend::io::syscalls::ioctl_tiocnxcl(fd.as_fd()) 33b8a62b91Sopenharmony_ci} 34b8a62b91Sopenharmony_ci 35b8a62b91Sopenharmony_ci/// `ioctl(fd, FIOCLEX)`—Set the close-on-exec flag. 36b8a62b91Sopenharmony_ci/// 37b8a62b91Sopenharmony_ci/// Also known as `fcntl(fd, F_SETFD, FD_CLOEXEC)`. 38b8a62b91Sopenharmony_ci/// 39b8a62b91Sopenharmony_ci/// # References 40b8a62b91Sopenharmony_ci/// - [Linux] 41b8a62b91Sopenharmony_ci/// - [Winsock2] 42b8a62b91Sopenharmony_ci/// 43b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/ioctl.2.html 44b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-ioctlsocket 45b8a62b91Sopenharmony_ci#[cfg(any(target_os = "ios", target_os = "macos"))] 46b8a62b91Sopenharmony_ci#[inline] 47b8a62b91Sopenharmony_ci#[doc(alias = "FIOCLEX")] 48b8a62b91Sopenharmony_ci#[doc(alias = "FD_CLOEXEC")] 49b8a62b91Sopenharmony_cipub fn ioctl_fioclex<Fd: AsFd>(fd: Fd) -> io::Result<()> { 50b8a62b91Sopenharmony_ci backend::io::syscalls::ioctl_fioclex(fd.as_fd()) 51b8a62b91Sopenharmony_ci} 52b8a62b91Sopenharmony_ci 53b8a62b91Sopenharmony_ci/// `ioctl(fd, FIONBIO, &value)`—Enables or disables non-blocking mode. 54b8a62b91Sopenharmony_ci/// 55b8a62b91Sopenharmony_ci/// # References 56b8a62b91Sopenharmony_ci/// - [Linux] 57b8a62b91Sopenharmony_ci/// - [Winsock2] 58b8a62b91Sopenharmony_ci/// 59b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/ioctl.2.html 60b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/winsock/winsock-ioctls#unix-ioctl-codes 61b8a62b91Sopenharmony_ci#[inline] 62b8a62b91Sopenharmony_ci#[doc(alias = "FIONBIO")] 63b8a62b91Sopenharmony_cipub fn ioctl_fionbio<Fd: AsFd>(fd: Fd, value: bool) -> io::Result<()> { 64b8a62b91Sopenharmony_ci backend::io::syscalls::ioctl_fionbio(fd.as_fd(), value) 65b8a62b91Sopenharmony_ci} 66b8a62b91Sopenharmony_ci 67b8a62b91Sopenharmony_ci/// `ioctl(fd, FIONREAD)`—Returns the number of bytes ready to be read. 68b8a62b91Sopenharmony_ci/// 69b8a62b91Sopenharmony_ci/// The result of this function gets silently coerced into a C `int` 70b8a62b91Sopenharmony_ci/// by the OS, so it may contain a wrapped value. 71b8a62b91Sopenharmony_ci/// 72b8a62b91Sopenharmony_ci/// # References 73b8a62b91Sopenharmony_ci/// - [Linux] 74b8a62b91Sopenharmony_ci/// - [Winsock2] 75b8a62b91Sopenharmony_ci/// 76b8a62b91Sopenharmony_ci/// [Linux]: https://man7.org/linux/man-pages/man2/ioctl_tty.2.html 77b8a62b91Sopenharmony_ci/// [Winsock2]: https://docs.microsoft.com/en-us/windows/win32/winsock/winsock-ioctls#unix-ioctl-codes 78b8a62b91Sopenharmony_ci#[cfg(not(target_os = "redox"))] 79b8a62b91Sopenharmony_ci#[inline] 80b8a62b91Sopenharmony_ci#[doc(alias = "FIONREAD")] 81b8a62b91Sopenharmony_cipub fn ioctl_fionread<Fd: AsFd>(fd: Fd) -> io::Result<u64> { 82b8a62b91Sopenharmony_ci backend::io::syscalls::ioctl_fionread(fd.as_fd()) 83b8a62b91Sopenharmony_ci} 84b8a62b91Sopenharmony_ci 85b8a62b91Sopenharmony_ci/// `ioctl(fd, BLKSSZGET)`—Returns the logical block size of a block device. 86b8a62b91Sopenharmony_ci#[cfg(any(target_os = "android", target_os = "linux"))] 87b8a62b91Sopenharmony_ci#[inline] 88b8a62b91Sopenharmony_ci#[doc(alias = "BLKSSZGET")] 89b8a62b91Sopenharmony_cipub fn ioctl_blksszget<Fd: AsFd>(fd: Fd) -> io::Result<u32> { 90b8a62b91Sopenharmony_ci backend::io::syscalls::ioctl_blksszget(fd.as_fd()) 91b8a62b91Sopenharmony_ci} 92b8a62b91Sopenharmony_ci 93b8a62b91Sopenharmony_ci/// `ioctl(fd, BLKPBSZGET)`—Returns the physical block size of a block device. 94b8a62b91Sopenharmony_ci#[cfg(any(target_os = "android", target_os = "linux"))] 95b8a62b91Sopenharmony_ci#[inline] 96b8a62b91Sopenharmony_ci#[doc(alias = "BLKPBSZGET")] 97b8a62b91Sopenharmony_cipub fn ioctl_blkpbszget<Fd: AsFd>(fd: Fd) -> io::Result<u32> { 98b8a62b91Sopenharmony_ci backend::io::syscalls::ioctl_blkpbszget(fd.as_fd()) 99b8a62b91Sopenharmony_ci} 100