Files
RedBear-OS/ipcd/examples/shm_demo.rs
T
bjorn3 b0586e9ead Add 'ipcd/' from commit 'e6f672bd48f9ac65a194f804bd0ed64c307f7b67'
git-subtree-dir: ipcd
git-subtree-mainline: 999da13e76
git-subtree-split: e6f672bd48
2025-02-21 20:07:22 +01:00

31 lines
835 B
Rust

use std::{
fs::File,
io,
mem,
os::unix::io::AsRawFd,
thread,
time::Duration
};
fn from_syscall_error(error: syscall::Error) -> io::Error {
io::Error::from_raw_os_error(error.errno as i32)
}
fn main() -> Result<(), io::Error> {
let file = File::open("shm:counter")?;
println!("Reading from map... ");
let counter = unsafe {
&mut *(syscall::fmap(file.as_raw_fd() as usize, &syscall::Map {
offset: 0,
address: 0,
size: mem::size_of::<usize>(),
flags: syscall::PROT_READ | syscall::PROT_WRITE | syscall::MAP_SHARED,
}).map_err(from_syscall_error)? as *mut usize)
};
println!("Read value {}", counter);
*counter += 1;
println!("Increased value to {}", counter);
thread::sleep(Duration::from_secs(1));
Ok(())
}