diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs
index 4573d4d854ccdc8d186e246aadc18b33adafe4d9..c10b0cd2198d47d424e8031b9a32b1dbc0ba481d 100644
--- a/src/header/unistd/mod.rs
+++ b/src/header/unistd/mod.rs
@@ -417,14 +417,30 @@ pub extern "C" fn pthread_atfork(
     unimplemented!();
 }
 
-// #[no_mangle]
+#[no_mangle]
 pub extern "C" fn pwrite(
     fildes: c_int,
     buf: *const c_void,
     nbyte: size_t,
     offset: off_t,
 ) -> ssize_t {
-    unimplemented!();
+    //TODO: better pwrite using system calls
+
+    let previous = lseek(fildes, offset, SEEK_SET);
+    if previous == -1 {
+        return -1;
+    }
+
+    let res = write(fildes, buf, nbyte);
+    if res < 0 {
+        return res;
+    }
+
+    if lseek(fildes, previous, SEEK_SET) == -1 {
+        return -1;
+    }
+
+    res
 }
 
 #[no_mangle]