Macro scall::syscall_raw
source · [−]macro_rules! syscall_raw {
($nr:ident) => { ... };
($nr:ident, $a1:expr) => { ... };
($nr:ident, $a1:expr, $a2:expr) => { ... };
($nr:ident, $a1:expr, $a2:expr, $a3:expr) => { ... };
($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr) => { ... };
($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) => { ... };
($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) => { ... };
($nr:ident, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr, $a7:expr) => { ... };
($nr:ident, $($args:expr,)*) => { ... };
}
Expand description
Make a syscall, and return the direct result (platform-specific).
Note: You should use syscall!
or syscall_nofail!
in most cases!
On Linux (on most architectures), this returns a usize
representing the return value of
the syscall (if an error occurred, the error code is encoded into the result). On macOS and
FreeBSD (and on some architectures on Linux), it returns a (usize, bool)
tuple indicating 1)
the return value and 2) whether an error occurred. (RawResult
is an alias for this type,
and it can be “decoded” into a Result<usize, i32>
with decode_raw_result()
.)
Note: syscall!
or syscall_nofail!
should be preferred for most purposes. However, this
macro may be useful if you need to make a series of syscalls quickly, then check the return
values. In this case, you can call syscall_raw!
, store the RawResult
s from each, and
then decode and check them with decode_raw_result()
.
Example
let res = unsafe { syscall_raw!(GETPID) };
// ...
let pid = decode_raw_result(res).unwrap();
assert_eq!(pid as u32, std::process::id());
Safety
See syscall!
.