diff --git a/src/header/sys_resource/mod.rs b/src/header/sys_resource/mod.rs
index 6e4f1ad2d521a38841c269f63f050bba777d3b2a..4372ee791fbd532427619a5f60a05c33ef27953c 100644
--- a/src/header/sys_resource/mod.rs
+++ b/src/header/sys_resource/mod.rs
@@ -2,7 +2,6 @@
 //! http://pubs.opengroup.org/onlinepubs/7908799/xsh/sysresource.h.html
 
 use crate::header::sys_time::timeval;
-use crate::platform;
 use crate::platform::types::*;
 use crate::platform::{Pal, Sys};
 
@@ -33,7 +32,7 @@ pub const RLIMIT_NICE: u64 = 13;
 pub const RLIMIT_RTPRIO: u64 = 14;
 pub const RLIMIT_NLIMITS: u64 = 15;
 
-type rlim_t = u64;
+pub type rlim_t = u64;
 
 #[repr(C)]
 pub struct rlimit {
@@ -65,12 +64,12 @@ pub struct rusage {
 // pub unsafe extern "C" fn getpriority(which: c_int, who: id_t) -> c_int {
 //     unimplemented!();
 // }
-//
-// #[no_mangle]
-// pub unsafe extern "C" fn getrlimit(resource: c_int, rlp: *mut rlimit) -> c_int {
-//     Sys::getrlimit(resource, rlp)
-// }
-//
+
+#[no_mangle]
+pub unsafe extern "C" fn getrlimit(resource: c_int, rlp: *mut rlimit) -> c_int {
+    Sys::getrlimit(resource, rlp)
+}
+
 // #[no_mangle]
 // pub unsafe extern "C" fn getrusage(who: c_int, r_usage: *mut rusage) -> c_int {
 //     // Sys::getrusage(who, r_usage)
diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs
index 52ffa125355e5fa5246510b37c695031ec8e93ed..d4a28bdd2d6764b6f8d0a95ae001e5549814c872 100644
--- a/src/platform/linux/mod.rs
+++ b/src/platform/linux/mod.rs
@@ -8,6 +8,7 @@ use crate::{
 };
 // use header::sys_resource::rusage;
 use crate::header::{
+    sys_resource::rlimit,
     sys_stat::stat,
     sys_statvfs::statvfs,
     sys_time::{timeval, timezone},
@@ -253,6 +254,10 @@ impl Pal for Sys {
         e(unsafe { syscall!(GETPPID) }) as pid_t
     }
 
+    unsafe fn getrlimit(resource: c_int, rlim: *mut rlimit) -> c_int {
+        e(syscall!(GETRLIMIT, resource, rlim)) as c_int
+    }
+
     fn gettid() -> pid_t {
         e(unsafe { syscall!(GETTID) }) as pid_t
     }
diff --git a/src/platform/pal/mod.rs b/src/platform/pal/mod.rs
index 6f16befd551f6f51529eb58ae50b4c970fe727b9..9a484c1301b3235a32cacd814cbe34a83e9f8855 100644
--- a/src/platform/pal/mod.rs
+++ b/src/platform/pal/mod.rs
@@ -3,6 +3,7 @@ use crate::{
     c_str::CStr,
     header::{
         dirent::dirent,
+        sys_resource::rlimit,
         sys_stat::stat,
         sys_statvfs::statvfs,
         sys_time::{timeval, timezone},
@@ -90,6 +91,8 @@ pub trait Pal {
 
     fn getppid() -> pid_t;
 
+    unsafe fn getrlimit(resource: c_int, rlim: *mut rlimit) -> c_int;
+
     fn gettid() -> pid_t;
 
     fn gettimeofday(tp: *mut timeval, tzp: *mut timezone) -> c_int;
diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs
index 56c6b9e22280e556d1346c4deb0da77b5c7949d7..697482aa3d78c344b69f16c1f723260e39f1b90b 100644
--- a/src/platform/redox/mod.rs
+++ b/src/platform/redox/mod.rs
@@ -13,6 +13,7 @@ use crate::{
         errno::{EINVAL, EIO, EPERM, ERANGE},
         fcntl,
         sys_mman::MAP_ANON,
+        sys_resource::{rlimit, RLIM_INFINITY},
         sys_stat::stat,
         sys_statvfs::statvfs,
         sys_time::{timeval, timezone},
@@ -556,6 +557,15 @@ impl Pal for Sys {
         e(syscall::getppid()) as pid_t
     }
 
+    unsafe fn getrlimit(resource: c_int, rlim: *mut rlimit) -> c_int {
+        //TODO
+        if ! rlim.is_null() {
+            (*rlim).rlim_cur = RLIM_INFINITY;
+            (*rlim).rlim_max = RLIM_INFINITY;
+        }
+        0
+    }
+
     fn gettid() -> pid_t {
         //TODO
         Self::getpid()