diff --git a/src/scheme/pipe.rs b/src/scheme/pipe.rs
index 802b748dfbd5f988095b6f96ce18123491c5df4b..022ec96069959ccb4cd7447ac736caf0687a44a1 100644
--- a/src/scheme/pipe.rs
+++ b/src/scheme/pipe.rs
@@ -6,8 +6,9 @@ use scheme::{AtomicSchemeId, ATOMIC_SCHEMEID_INIT, SchemeId};
 
 use sync::WaitCondition;
 use syscall::error::{Error, Result, EAGAIN, EBADF, EINVAL, EPIPE};
-use syscall::flag::{F_GETFL, F_SETFL, O_ACCMODE, O_NONBLOCK};
+use syscall::flag::{F_GETFL, F_SETFL, O_ACCMODE, O_NONBLOCK, MODE_CHR};
 use syscall::scheme::Scheme;
+use syscall::data::Stat;
 
 /// Pipes list
 pub static PIPE_SCHEME_ID: AtomicSchemeId = ATOMIC_SCHEMEID_INIT;
@@ -122,6 +123,15 @@ impl Scheme for PipeScheme {
         Ok(i)
     }
 
+    fn fstat(&self, _id: usize, stat: &mut Stat) -> Result<usize> {
+        *stat = Stat {
+            st_mode: MODE_CHR | 0o666,
+            ..Default::default()
+        };
+
+        Ok(0)
+    }
+
     fn fsync(&self, _id: usize) -> Result<usize> {
         Ok(0)
     }