redox/kernel/syscall/process.rs

36 lines
786 B
Rust
Raw Normal View History

2016-08-14 23:58:35 +02:00
///! Process syscalls
use arch::interrupt::halt;
2016-08-20 22:32:45 +02:00
use context;
use super::{convert_slice, Error, Result};
2016-08-15 00:07:41 +02:00
2016-08-14 23:58:35 +02:00
pub fn exit(status: usize) -> ! {
println!("Exit {}", status);
loop {
unsafe { halt() };
}
}
2016-08-15 00:07:41 +02:00
pub fn exec(path: &[u8], args: &[[usize; 2]]) -> Result<usize> {
print!("Exec {:?}", ::core::str::from_utf8(path));
for arg in args {
print!(" {:?}", ::core::str::from_utf8(convert_slice(arg[0] as *const u8, arg[1])?));
}
println!("");
Ok(0)
}
2016-08-20 22:32:45 +02:00
pub fn getpid() -> Result<usize> {
2016-09-09 03:31:26 +02:00
let contexts = context::contexts();
let context_lock = contexts.current().ok_or(Error::NoProcess)?;
let context = context_lock.read();
Ok(context.id)
2016-08-20 22:32:45 +02:00
}
pub fn sched_yield() -> Result<usize> {
unsafe { context::switch(); }
Ok(0)
}