All Projects → jmillikin → rust-fuse

jmillikin / rust-fuse

Licence: Apache-2.0 license
A FUSE server implementation for Rust.

Programming Languages

rust
11053 projects
RenderScript
48 projects
Starlark
911 projects

Labels

Projects that are alternatives of or similar to rust-fuse

Darling Dmg
FUSE module for .dmg files (containing an HFS+ filesystem)
Stars: ✭ 214 (+723.08%)
Mutual labels:  fuse
cxfuse
Crossmeta FUSE Windows Port
Stars: ✭ 55 (+111.54%)
Mutual labels:  fuse
fuse-device
Use the basic Device functions such as UUID and current localization from Fuse
Stars: ✭ 13 (-50%)
Mutual labels:  fuse
Ninfs
FUSE filesystem Python scripts for Nintendo console files
Stars: ✭ 241 (+826.92%)
Mutual labels:  fuse
fatx
Original Xbox FATX Filesystem Library, Python bindings, FUSE driver, and GUI explorer
Stars: ✭ 87 (+234.62%)
Mutual labels:  fuse
ipfs-api-mount
Mount IPFS directory as local FS.
Stars: ✭ 16 (-38.46%)
Mutual labels:  fuse
Supertag
A tag-based filesystem
Stars: ✭ 207 (+696.15%)
Mutual labels:  fuse
hatexmpp
fuse xmpp client (xmppfs). The development stopped, you may like https://github.com/l29ah/hatexmpp3
Stars: ✭ 26 (+0%)
Mutual labels:  fuse
GitFS
A FUSE filesystem that stores data on Git
Stars: ✭ 26 (+0%)
Mutual labels:  fuse
profuse
An OCaml implementation of the FUSE protocol versions 7.8 and 7.23
Stars: ✭ 29 (+11.54%)
Mutual labels:  fuse
Cgofuse
Cross-platform FUSE library for Go - Works on Windows, macOS, Linux, FreeBSD, NetBSD, OpenBSD
Stars: ✭ 245 (+842.31%)
Mutual labels:  fuse
elfuse
FUSE filesystems in Emacs Lisp
Stars: ✭ 61 (+134.62%)
Mutual labels:  fuse
dedupsqlfs
Deduplicating filesystem via Python3, FUSE and SQLite
Stars: ✭ 24 (-7.69%)
Mutual labels:  fuse
Sparsebundlefs
FUSE filesystem for reading macOS sparse-bundle disk images
Stars: ✭ 238 (+815.38%)
Mutual labels:  fuse
blahajfs
No description or website provided.
Stars: ✭ 19 (-26.92%)
Mutual labels:  fuse
Tifs
A distributed POSIX filesystem based on TiKV, with partition tolerance and strict consistency.
Stars: ✭ 209 (+703.85%)
Mutual labels:  fuse
squashmount
Init and management script for mounting rewritable squashfs-compressed data
Stars: ✭ 40 (+53.85%)
Mutual labels:  fuse
fs-fuse
Export any Node.js `fs`-like object as a FUSE filesystem
Stars: ✭ 32 (+23.08%)
Mutual labels:  fuse
UserFileSystemSamples
IT Hit User File System Engine samples in .NET/C#. Samples implement Virtual File System for Windows and Mac with synchronization support, on-demand loading, offline files, and Windows File Manager integration.
Stars: ✭ 60 (+130.77%)
Mutual labels:  fuse
tgmount
Mount Telegram dialogs and channels as a Virtual File System.
Stars: ✭ 52 (+100%)
Mutual labels:  fuse

rust-fuse

License Apache%202.0 blue docs github.io green

The fuse crate is an implementation of the FUSE protocol, which allows filesystems and character devices to be backed by a userspace process. It currently provides enough coverage to implement basic FUSE and CUSE servers.

Stability

This is a pre-v0.1 library. Many of FUSE’s more advanced capabilities do not work yet, and test coverage is incomplete. Please file issues if there is functionality you’d like to see implemented.

Feature Tracking issue

FreeBSD support

5

High-level API

10

Interrupts

5

macOS support

Not planned due to lack of open-source kernel drivers.

Unprivileged mounts

6

Contributing

I am happy to accept contributions in the form of bug reports, pull requests, or emailed patches.

Usage

Add a dependency in Cargo.toml:

[dependencies]
fuse = { git = "https://github.com/jmillikin/rust-fuse" }

Implement the FuseHandlers trait for your filesystem:

extern crate fuse;
use fuse::server;
use fuse::server::fuse_rpc;

struct HelloFS {}
impl<S: server::io::FuseSocket> fuse_rpc::Handlers<S> for HelloFS {
    // your filesystem handlers here
}

Use fuse-libc (requires libc) or fuse-linux (requires a supported target architecture) to build and run your filesystem server:

fn mount(target: &OsStr) -> fuse_libc::FuseServerSocket {
	let mount_options = fuse::os::linux::MountOptions::new();
	fuse_libc::os::linux::mount(&target_cstr, mount_options).unwrap()
}

fn main() {
	let handlers = HelloWorldFS {};
	let mount_target = std::env::args_os().nth(1).unwrap();
	let dev_fuse = mount(&mount_target);
	let conn = server::FuseServer::new().connect(dev_fuse).unwrap();
	fuse_rpc::serve(&conn, &handlers);
}

Please see the documentation for advanced options.

Feature std

It is possible to run a minimal single-threaded FUSE server in a no_std binary.

[dependencies.fuse]
default-features = false

Note that some functionality is not available in no_std mode. Please see the documentation for details on which parts of the API depend on std.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].