diff --git a/src/call.rs b/src/call.rs index 5150c2d..7ce3349 100644 --- a/src/call.rs +++ b/src/call.rs @@ -256,6 +256,11 @@ pub fn setreuid(ruid: usize, euid: usize) -> Result { unsafe { syscall2(SYS_SETREUID, ruid, euid) } } +/// Set up a signal handler +pub fn signal(sig: usize, handler: extern fn(usize)) -> Result { + unsafe { syscall2(SYS_SIGNAL, sig, handler as usize) } +} + /// Remove a file pub fn unlink>(path: T) -> Result { unsafe { syscall2(SYS_UNLINK, path.as_ref().as_ptr() as usize, path.as_ref().len()) } diff --git a/src/flag.rs b/src/flag.rs index 7a92429..42d1ba6 100644 --- a/src/flag.rs +++ b/src/flag.rs @@ -1,6 +1,7 @@ pub const CLONE_VM: usize = 0x100; pub const CLONE_FS: usize = 0x200; pub const CLONE_FILES: usize = 0x400; +pub const CLONE_SIGHAND: usize = 0x800; pub const CLONE_VFORK: usize = 0x4000; pub const CLOCK_REALTIME: usize = 1; @@ -84,4 +85,7 @@ pub const SIGIO: usize = 29; pub const SIGPWR: usize = 30; pub const SIGSYS: usize = 31; +pub const SIG_DFL: usize = 0; +pub const SIG_IGN: usize = 1; + pub const WNOHANG: usize = 1; diff --git a/src/number.rs b/src/number.rs index b8cc0f0..5d656dc 100644 --- a/src/number.rs +++ b/src/number.rs @@ -61,5 +61,6 @@ pub const SYS_PIPE2: usize = 331; pub const SYS_SETREGID: usize = 204; pub const SYS_SETRENS: usize = 952; pub const SYS_SETREUID: usize = 203; +pub const SYS_SIGNAL: usize = 48; pub const SYS_WAITPID: usize = 7; pub const SYS_YIELD: usize = 158;