summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml2
-rw-r--r--src/unistd.rs6
-rw-r--r--test/test_unistd.rs11
3 files changed, 18 insertions, 1 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 8beb2035..9db0c1df 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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]