#[macro_export] #[doc(hidden)]
macro_rules! ioc {
($inout:expr, $group:expr, $num:expr, $len:expr) => {
$inout
| (($len as $crate::sys::ioctl::ioctl_num_type
& $crate::sys::ioctl::IOCPARM_MASK)
<< 16)
| (($group as $crate::sys::ioctl::ioctl_num_type) << 8)
| ($num as $crate::sys::ioctl::ioctl_num_type)
};
}
/// Generate an ioctl request code for a command that passes no data. /// /// This is equivalent to the `_IO()` macro exposed by the C ioctl API. /// /// You should only use this macro directly if the `ioctl` you're working /// with is "bad" and you cannot use `ioctl_none!()` directly. /// /// # Example /// /// ``` /// # #[macro_use] extern crate nix; /// const KVMIO: u8 = 0xAE; /// ioctl_write_int_bad!(kvm_create_vm, request_code_none!(KVMIO, 0x03)); /// # fn main() {} /// ``` #[macro_export(local_inner_macros)]
macro_rules! request_code_none {
($g:expr, $n:expr) => {
ioc!($crate::sys::ioctl::VOID, $g, $n, 0)
};
}
/// Generate an ioctl request code for a command that passes an integer /// /// This is equivalent to the `_IOWINT()` macro exposed by the C ioctl API. /// /// You should only use this macro directly if the `ioctl` you're working /// with is "bad" and you cannot use `ioctl_write_int!()` directly. #[macro_export(local_inner_macros)]
macro_rules! request_code_write_int {
($g:expr, $n:expr) => {
ioc!(
$crate::sys::ioctl::VOID,
$g,
$n,
::std::mem::size_of::<$crate::libc::c_int>()
)
};
}
/// Generate an ioctl request code for a command that reads. /// /// This is equivalent to the `_IOR()` macro exposed by the C ioctl API. /// /// You should only use this macro directly if the `ioctl` you're working /// with is "bad" and you cannot use `ioctl_read!()` directly. /// /// The read/write direction is relative to userland, so this /// command would be userland is reading and the kernel is /// writing. #[macro_export(local_inner_macros)]
macro_rules! request_code_read {
($g:expr, $n:expr, $len:expr) => {
ioc!($crate::sys::ioctl::OUT, $g, $n, $len)
};
}
/// Generate an ioctl request code for a command that writes. /// /// This is equivalent to the `_IOW()` macro exposed by the C ioctl API. /// /// You should only use this macro directly if the `ioctl` you're working /// with is "bad" and you cannot use `ioctl_write!()` directly. /// /// The read/write direction is relative to userland, so this /// command would be userland is writing and the kernel is /// reading. #[macro_export(local_inner_macros)]
macro_rules! request_code_write {
($g:expr, $n:expr, $len:expr) => {
ioc!($crate::sys::ioctl::IN, $g, $n, $len)
};
}
/// Generate an ioctl request code for a command that reads and writes. /// /// This is equivalent to the `_IOWR()` macro exposed by the C ioctl API. /// /// You should only use this macro directly if the `ioctl` you're working /// with is "bad" and you cannot use `ioctl_readwrite!()` directly. #[macro_export(local_inner_macros)]
macro_rules! request_code_readwrite {
($g:expr, $n:expr, $len:expr) => {
ioc!($crate::sys::ioctl::INOUT, $g, $n, $len)
};
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-06-18)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.