Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 

README.md

RustFS

RustFS is a virtual file system written completely in Rust.

Usage

Add RustFS to your dependencies:

[dependencies]
rustfs = { git = "https://github.com/SergioBenitez/RustFS" }

Then, import the crate into your project and bring types into the namespace:

extern crate rustfs;

use rustfs::{Proc, O_CREAT, O_RDWR};

Finally, use Proc::new() to create a new Proc. Call open / close / seek / read / write on it:

let mut p = Proc::new();

// Let's write `data` to a new file named "file".
let data = b"... some data ...";
  let fd = p.open("file", O_CREAT | O_RDWR);
  p.write(fd, &data);
  p.close(fd);

  // Let's read back that data to a buffer named `buf` of the correct size.
  let mut buf = vec![0; size];
  let fd = p.open("file", O_RDWR);
  p.read(fd, &mut buf);
  p.close(fd);

  // All done. Unlink.
p.unlink("file");

For more examples on how to use RustFS, see the benchmarks in bench/bench.rs and tests in src/proc.rs.

Testing

Run the tests using RUST_TEST_THREADS=1 cargo test. The tests need to be run sequentially.

Benchmarking

You'll need Rust nightly to run the benchmarks. We use a custom built benchmarking tool to get accurate results, and that benchmarking tool uses assembly. Assembly can only be used in Rust nightly.

To run the benchmarks, switch into the bench directory:

cd bench

Run them with Cargo:

cargo run --release

Directory Structure

  • bench/

    • bench.rs The benchmarks.
  • libbench/lib.rs The benchmarking library.

  • libslab/lib.rs The slab allocator library.

  • src/

    • directory.rs Insert/Remove/Get directory method implementations.
    • file.rs FileHandle implementation and structure definitions.
    • inode.rs Inode structure and implementation.
    • proc.rs Proc structure (which wraps everything) and implementation.

About

A virtual file system written in Rust.

Resources

Releases

No releases published
You can’t perform that action at this time.