Create example userspace scheme. Remove kernel duplication of syscalls, use syscall crate instead
This commit is contained in:
parent
941fc0b494
commit
f60661820d
25 changed files with 374 additions and 414 deletions
6
schemes/example/Cargo.toml
Normal file
6
schemes/example/Cargo.toml
Normal file
|
@ -0,0 +1,6 @@
|
|||
[package]
|
||||
name = "example"
|
||||
version = "0.1.0"
|
||||
|
||||
[dependencies.syscall]
|
||||
path = "../../syscall/"
|
38
schemes/example/src/main.rs
Normal file
38
schemes/example/src/main.rs
Normal file
|
@ -0,0 +1,38 @@
|
|||
extern crate syscall;
|
||||
|
||||
use std::fs::File;
|
||||
use std::io::{Read, Write};
|
||||
use std::str;
|
||||
use std::thread;
|
||||
|
||||
use syscall::{Packet, Result, Scheme};
|
||||
|
||||
struct ExampleScheme;
|
||||
|
||||
impl Scheme for ExampleScheme {
|
||||
fn open(&self, path: &[u8], _flags: usize) -> Result<usize> {
|
||||
println!("{}", unsafe { str::from_utf8_unchecked(path) });
|
||||
Ok(0)
|
||||
}
|
||||
|
||||
fn dup(&self, file: usize) -> Result<usize> {
|
||||
Ok(file)
|
||||
}
|
||||
|
||||
fn close(&self, _file: usize) -> Result<usize> {
|
||||
Ok(0)
|
||||
}
|
||||
}
|
||||
|
||||
fn main(){
|
||||
thread::spawn(move || {
|
||||
let mut socket = File::create(":example").expect("example: failed to create example scheme");
|
||||
let scheme = ExampleScheme;
|
||||
loop {
|
||||
let mut packet = Packet::default();
|
||||
socket.read(&mut packet).expect("example: failed to read events from example scheme");
|
||||
scheme.handle(&mut packet);
|
||||
socket.write(&packet).expect("example: failed to write responses to example scheme");
|
||||
}
|
||||
});
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue