diff options
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | src/unistd.rs | 6 | ||||
-rw-r--r-- | test/test_unistd.rs | 11 |
3 files changed, 18 insertions, 1 deletions
@@ -20,7 +20,7 @@ preadv_pwritev = [] signalfd = [] [dependencies] -libc = "0.2.7" +libc = "0.2.8" bitflags = "0.4" cfg-if = "0.1.0" diff --git a/src/unistd.rs b/src/unistd.rs index 193086df..5d57afd1 100644 --- a/src/unistd.rs +++ b/src/unistd.rs @@ -56,6 +56,12 @@ pub fn setpgid(pid: pid_t, pgid: pid_t) -> Result<()> { Errno::result(res).map(drop) } +#[cfg(any(target_os = "linux", target_os = "android"))] +#[inline] +pub fn gettid() -> pid_t { + unsafe { libc::syscall(libc::SYS_gettid) as pid_t } // no error handling, according to man page: "These functions are always successful." +} + #[inline] pub fn dup(oldfd: RawFd) -> Result<RawFd> { let res = unsafe { libc::dup(oldfd) }; diff --git a/test/test_unistd.rs b/test/test_unistd.rs index 510f8f6c..2f361cfe 100644 --- a/test/test_unistd.rs +++ b/test/test_unistd.rs @@ -54,6 +54,17 @@ fn test_getpid() { assert!(ppid > 0); } +#[cfg(any(target_os = "linux", target_os = "android"))] +mod linux_android { + use nix::unistd::gettid; + + #[test] + fn test_gettid() { + let tid = gettid(); + assert!(tid > 0); + } +} + macro_rules! execve_test_factory( ($test_name:ident, $syscall:ident, $unix_sh:expr, $android_sh:expr) => ( #[test] |