|
@@ -1,5 +1,8 @@
|
|
|
+extern crate alloc;
|
|
|
+
|
|
|
use core::ptr;
|
|
|
use core::slice;
|
|
|
+use alloc::Vec;
|
|
|
use syscall;
|
|
|
|
|
|
use c_str;
|
|
@@ -119,6 +122,18 @@ pub fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> c_int {
|
|
|
e(syscall::open(path, (oflag as usize) | (mode as usize))) as c_int
|
|
|
}
|
|
|
|
|
|
+pub fn pipe(fds: [c_int; 2]) -> c_int {
|
|
|
+ let usize_vec = fds.iter().map(|x| *x as usize).collect::<Vec<usize>>();
|
|
|
+ let usize_slice = usize_vec.as_slice();
|
|
|
+ let mut usize_arr: [usize; 2] = Default::default();
|
|
|
+ usize_arr.copy_from_slice(usize_slice);
|
|
|
+ e(syscall::pipe2(&mut usize_arr, 0)) as c_int
|
|
|
+}
|
|
|
+
|
|
|
+pub fn read(fd: c_int, buf: &mut [u8]) -> ssize_t {
|
|
|
+ e(syscall::read(fd as usize, buf)) as ssize_t
|
|
|
+}
|
|
|
+
|
|
|
pub fn write(fd: c_int, buf: &[u8]) -> ssize_t {
|
|
|
e(syscall::write(fd as usize, buf)) as ssize_t
|
|
|
}
|