pub trait Fuse {
Show 43 methods
// Provided methods
fn lookup(
&self,
_request: &Request,
_name: &LxStr,
) -> Result<fuse_entry_out> { ... }
fn forget(&self, _node_id: u64, _lookup_count: u64) { ... }
fn get_attr(
&self,
_request: &Request,
_flags: u32,
_fh: u64,
) -> Result<fuse_attr_out> { ... }
fn set_attr(
&self,
_request: &Request,
_arg: &fuse_setattr_in,
) -> Result<fuse_attr_out> { ... }
fn read_link(&self, _request: &Request) -> Result<LxString> { ... }
fn symlink(
&self,
_request: &Request,
_name: &LxStr,
_target: &LxStr,
) -> Result<fuse_entry_out> { ... }
fn mknod(
&self,
_request: &Request,
_name: &LxStr,
_arg: &fuse_mknod_in,
) -> Result<fuse_entry_out> { ... }
fn mkdir(
&self,
_request: &Request,
_name: &LxStr,
_arg: &fuse_mkdir_in,
) -> Result<fuse_entry_out> { ... }
fn unlink(&self, _request: &Request, _name: &LxStr) -> Result<()> { ... }
fn rmdir(&self, _request: &Request, _name: &LxStr) -> Result<()> { ... }
fn rename(
&self,
_request: &Request,
_name: &LxStr,
_new_dir: u64,
_new_name: &LxStr,
_flags: u32,
) -> Result<()> { ... }
fn link(
&self,
_request: &Request,
_name: &LxStr,
_target: u64,
) -> Result<fuse_entry_out> { ... }
fn open(&self, _request: &Request, _flags: u32) -> Result<fuse_open_out> { ... }
fn read(&self, _request: &Request, _arg: &fuse_read_in) -> Result<Vec<u8>> { ... }
fn write(
&self,
_request: &Request,
_arg: &fuse_write_in,
_data: &[u8],
) -> Result<usize> { ... }
fn statfs(&self, _request: &Request) -> Result<fuse_kstatfs> { ... }
fn release(&self, _request: &Request, _arg: &fuse_release_in) -> Result<()> { ... }
fn fsync(&self, _request: &Request, _fh: u64, _flags: u32) -> Result<()> { ... }
fn set_xattr(
&self,
_request: &Request,
_name: &LxStr,
_value: &[u8],
_flags: u32,
) -> Result<()> { ... }
fn get_xattr(
&self,
_request: &Request,
_name: &LxStr,
_size: u32,
) -> Result<Vec<u8>> { ... }
fn get_xattr_size(&self, _request: &Request, _name: &LxStr) -> Result<u32> { ... }
fn list_xattr(&self, _request: &Request, _size: u32) -> Result<Vec<u8>> { ... }
fn list_xattr_size(&self, _request: &Request) -> Result<u32> { ... }
fn remove_xattr(&self, _request: &Request, _name: &LxStr) -> Result<()> { ... }
fn flush(&self, _request: &Request, _arg: &fuse_flush_in) -> Result<()> { ... }
fn init(&self, _info: &mut SessionInfo) { ... }
fn open_dir(&self, _request: &Request, _flags: u32) -> Result<fuse_open_out> { ... }
fn read_dir(
&self,
_request: &Request,
_arg: &fuse_read_in,
) -> Result<Vec<u8>> { ... }
fn release_dir(
&self,
_request: &Request,
_arg: &fuse_release_in,
) -> Result<()> { ... }
fn fsync_dir(&self, _request: &Request, _fh: u64, _flags: u32) -> Result<()> { ... }
fn get_lock(
&self,
_request: &Request,
_arg: &fuse_lk_in,
) -> Result<fuse_file_lock> { ... }
fn set_lock(
&self,
_request: &Request,
_arg: &fuse_lk_in,
_sleep: bool,
) -> Result<()> { ... }
fn access(&self, _request: &Request, _mask: u32) -> Result<()> { ... }
fn create(
&self,
_request: &Request,
_name: &LxStr,
_arg: &fuse_create_in,
) -> Result<CreateOut> { ... }
fn block_map(
&self,
_request: &Request,
_block: u64,
_block_size: u32,
) -> Result<u64> { ... }
fn destroy(&self) { ... }
fn ioctl(
&self,
_request: &Request,
_arg: &fuse_ioctl_in,
_data: &[u8],
) -> Result<(i32, Vec<u8>)> { ... }
fn fallocate(
&self,
_request: &Request,
_arg: &fuse_fallocate_in,
) -> Result<()> { ... }
fn read_dir_plus(
&self,
_request: &Request,
_arg: &fuse_read_in,
) -> Result<Vec<u8>> { ... }
fn lseek(
&self,
_request: &Request,
_fh: u64,
_offset: u64,
_whence: u32,
) -> Result<u64> { ... }
fn copy_file_range(
&self,
_request: &Request,
_arg: &fuse_copy_file_range_in,
) -> Result<usize> { ... }
fn setup_mapping(
&self,
request: &Request,
mapper: &dyn Mapper,
arg: &fuse_setupmapping_in,
) -> Result<()> { ... }
fn remove_mapping(
&self,
request: &Request,
mapper: &dyn Mapper,
moffset: u64,
len: u64,
) -> Result<()> { ... }
}
Expand description
Trait that FUSE file systems must implement.
Most operations are loosely based on fuse_lowlevel_ops
in libfuse, so check the official
libfuse documentation for more information on how
these operations should behave.
For many operations, a reply of ENOSYS
is taken as permanent failure, preventing the client
from ever issuing that operation again.
Provided Methods§
Sourcefn lookup(&self, _request: &Request, _name: &LxStr) -> Result<fuse_entry_out>
fn lookup(&self, _request: &Request, _name: &LxStr) -> Result<fuse_entry_out>
Looks up a child of an inode.
This increases the lookup count of the found entry by one.
Sourcefn forget(&self, _node_id: u64, _lookup_count: u64)
fn forget(&self, _node_id: u64, _lookup_count: u64)
Tells the FUSE file system to reduce the lookup count of an inode by the specified amount.
§Note
The client is not guaranteed to send a forget message for every inode if the file system is unmounted.
Sourcefn get_attr(
&self,
_request: &Request,
_flags: u32,
_fh: u64,
) -> Result<fuse_attr_out>
fn get_attr( &self, _request: &Request, _flags: u32, _fh: u64, ) -> Result<fuse_attr_out>
Retrieves the attributes of a file.
§Note
If attributes are retrieved through an open file descriptor (i.e. using fstat
), the
fh
parameter will be set to the file handle returned by the open
call.
Sourcefn set_attr(
&self,
_request: &Request,
_arg: &fuse_setattr_in,
) -> Result<fuse_attr_out>
fn set_attr( &self, _request: &Request, _arg: &fuse_setattr_in, ) -> Result<fuse_attr_out>
Changes the attributes of a file.
Sourcefn read_link(&self, _request: &Request) -> Result<LxString>
fn read_link(&self, _request: &Request) -> Result<LxString>
Reads the target of a symbolic link.
Sourcefn symlink(
&self,
_request: &Request,
_name: &LxStr,
_target: &LxStr,
) -> Result<fuse_entry_out>
fn symlink( &self, _request: &Request, _name: &LxStr, _target: &LxStr, ) -> Result<fuse_entry_out>
Creates a symbolic link as a child of the specified inode.
Sourcefn mknod(
&self,
_request: &Request,
_name: &LxStr,
_arg: &fuse_mknod_in,
) -> Result<fuse_entry_out>
fn mknod( &self, _request: &Request, _name: &LxStr, _arg: &fuse_mknod_in, ) -> Result<fuse_entry_out>
Creates a regular file, fifo, socket, or character or block device node as a child of the specified inode.
Sourcefn mkdir(
&self,
_request: &Request,
_name: &LxStr,
_arg: &fuse_mkdir_in,
) -> Result<fuse_entry_out>
fn mkdir( &self, _request: &Request, _name: &LxStr, _arg: &fuse_mkdir_in, ) -> Result<fuse_entry_out>
Creates a directory as a child of the specified inode.
Sourcefn unlink(&self, _request: &Request, _name: &LxStr) -> Result<()>
fn unlink(&self, _request: &Request, _name: &LxStr) -> Result<()>
Removes a non-directory child from the specified inode.
Sourcefn rmdir(&self, _request: &Request, _name: &LxStr) -> Result<()>
fn rmdir(&self, _request: &Request, _name: &LxStr) -> Result<()>
Removes a directory child from the specified inode.
Sourcefn rename(
&self,
_request: &Request,
_name: &LxStr,
_new_dir: u64,
_new_name: &LxStr,
_flags: u32,
) -> Result<()>
fn rename( &self, _request: &Request, _name: &LxStr, _new_dir: u64, _new_name: &LxStr, _flags: u32, ) -> Result<()>
Renames a file.
The file’s original parent is the request’s inode, while the new parent is indicated using
new_dir
.
Sourcefn link(
&self,
_request: &Request,
_name: &LxStr,
_target: u64,
) -> Result<fuse_entry_out>
fn link( &self, _request: &Request, _name: &LxStr, _target: u64, ) -> Result<fuse_entry_out>
Creates a hard-link to an existing inode, as a child of the specified inode..
Sourcefn open(&self, _request: &Request, _flags: u32) -> Result<fuse_open_out>
fn open(&self, _request: &Request, _flags: u32) -> Result<fuse_open_out>
Opens a file.
If not implemented, this call will succeed, which can be used if the file system doesn’t
need any state for open files, since the inode number is also provided to functions
such as read
and write
.
Sourcefn read(&self, _request: &Request, _arg: &fuse_read_in) -> Result<Vec<u8>>
fn read(&self, _request: &Request, _arg: &fuse_read_in) -> Result<Vec<u8>>
Reads data from an open file.
Sourcefn write(
&self,
_request: &Request,
_arg: &fuse_write_in,
_data: &[u8],
) -> Result<usize>
fn write( &self, _request: &Request, _arg: &fuse_write_in, _data: &[u8], ) -> Result<usize>
Writes data to an open file.
Sourcefn statfs(&self, _request: &Request) -> Result<fuse_kstatfs>
fn statfs(&self, _request: &Request) -> Result<fuse_kstatfs>
Retrieves the attributes of the file system.
Sourcefn release(&self, _request: &Request, _arg: &fuse_release_in) -> Result<()>
fn release(&self, _request: &Request, _arg: &fuse_release_in) -> Result<()>
Closes an open file.
If not implemented, this call will succeed. Won’t be called if open
returned ENOSYS
(the default).
Sourcefn fsync(&self, _request: &Request, _fh: u64, _flags: u32) -> Result<()>
fn fsync(&self, _request: &Request, _fh: u64, _flags: u32) -> Result<()>
Synchronize file contents.
Sourcefn set_xattr(
&self,
_request: &Request,
_name: &LxStr,
_value: &[u8],
_flags: u32,
) -> Result<()>
fn set_xattr( &self, _request: &Request, _name: &LxStr, _value: &[u8], _flags: u32, ) -> Result<()>
Add or change an extended attribute on an inode.
Sourcefn get_xattr(
&self,
_request: &Request,
_name: &LxStr,
_size: u32,
) -> Result<Vec<u8>>
fn get_xattr( &self, _request: &Request, _name: &LxStr, _size: u32, ) -> Result<Vec<u8>>
Retrieve an extended attribute on an inode.
Sourcefn get_xattr_size(&self, _request: &Request, _name: &LxStr) -> Result<u32>
fn get_xattr_size(&self, _request: &Request, _name: &LxStr) -> Result<u32>
Retrieve the size of an extended attribute on an inode.
Sourcefn list_xattr(&self, _request: &Request, _size: u32) -> Result<Vec<u8>>
fn list_xattr(&self, _request: &Request, _size: u32) -> Result<Vec<u8>>
List all extended attributes on an inode.
Sourcefn list_xattr_size(&self, _request: &Request) -> Result<u32>
fn list_xattr_size(&self, _request: &Request) -> Result<u32>
Retrieve the size of the list of extended attributes on an inode.
Sourcefn remove_xattr(&self, _request: &Request, _name: &LxStr) -> Result<()>
fn remove_xattr(&self, _request: &Request, _name: &LxStr) -> Result<()>
Remove an extended attribute from an inode.
Sourcefn flush(&self, _request: &Request, _arg: &fuse_flush_in) -> Result<()>
fn flush(&self, _request: &Request, _arg: &fuse_flush_in) -> Result<()>
Called on each close()
of a file descriptor for an opened file.
This is called for every file descriptor, so may be called more than once.
Use release
to know when the last file descriptor was closed.
Sourcefn init(&self, _info: &mut SessionInfo)
fn init(&self, _info: &mut SessionInfo)
Negotiate file system parameters with the client.
Sourcefn open_dir(&self, _request: &Request, _flags: u32) -> Result<fuse_open_out>
fn open_dir(&self, _request: &Request, _flags: u32) -> Result<fuse_open_out>
Opens a directory.
If not implemented, this call will succeed, which can be used if the file system doesn’t
need any state for open files, since the inode number is also provided to functions
such as read_dir
.
Sourcefn read_dir(&self, _request: &Request, _arg: &fuse_read_in) -> Result<Vec<u8>>
fn read_dir(&self, _request: &Request, _arg: &fuse_read_in) -> Result<Vec<u8>>
Reads the contents of a directory.
Use DirEntryWriter
to create a buffer containing directory entries.
Sourcefn release_dir(&self, _request: &Request, _arg: &fuse_release_in) -> Result<()>
fn release_dir(&self, _request: &Request, _arg: &fuse_release_in) -> Result<()>
Closes a directory.
If not implemented, this call will succeed. Won’t be called if opendir
returned ENOSYS (the default).
Sourcefn fsync_dir(&self, _request: &Request, _fh: u64, _flags: u32) -> Result<()>
fn fsync_dir(&self, _request: &Request, _fh: u64, _flags: u32) -> Result<()>
Synchronize directory contents.
Sourcefn get_lock(
&self,
_request: &Request,
_arg: &fuse_lk_in,
) -> Result<fuse_file_lock>
fn get_lock( &self, _request: &Request, _arg: &fuse_lk_in, ) -> Result<fuse_file_lock>
Test for a POSIX file lock.
Sourcefn set_lock(
&self,
_request: &Request,
_arg: &fuse_lk_in,
_sleep: bool,
) -> Result<()>
fn set_lock( &self, _request: &Request, _arg: &fuse_lk_in, _sleep: bool, ) -> Result<()>
Acquire, modify or release a POSIX file lock.
If not implemented, the client still allows for local file locking.
Sourcefn create(
&self,
_request: &Request,
_name: &LxStr,
_arg: &fuse_create_in,
) -> Result<CreateOut>
fn create( &self, _request: &Request, _name: &LxStr, _arg: &fuse_create_in, ) -> Result<CreateOut>
Create and open a file.
If not implemented, the client will use mknod
followed by open
.
Sourcefn block_map(
&self,
_request: &Request,
_block: u64,
_block_size: u32,
) -> Result<u64>
fn block_map( &self, _request: &Request, _block: u64, _block_size: u32, ) -> Result<u64>
Map a file block index to a device block index.
This method is only relevant for file systems mounted using fuseblk
.
Sourcefn destroy(&self)
fn destroy(&self)
Clean up the file system.
For regular FUSE, the client only calls this for file systems mounted using fuseblk
, but
for other file systems Connection
will call it when the /dev/fuse
connection is closed.
For virtio-fs, the client will call this when the file system is unmounted. After receiving
destroy, another init
call can be received if the file system is mounted again.
Sourcefn ioctl(
&self,
_request: &Request,
_arg: &fuse_ioctl_in,
_data: &[u8],
) -> Result<(i32, Vec<u8>)>
fn ioctl( &self, _request: &Request, _arg: &fuse_ioctl_in, _data: &[u8], ) -> Result<(i32, Vec<u8>)>
Submit an ioctl.
§Note
This is a somewhat limited subset of the ioctl functionality of libfuse; the additional functionality seems to only apply to CUSE, however.
Sourcefn fallocate(&self, _request: &Request, _arg: &fuse_fallocate_in) -> Result<()>
fn fallocate(&self, _request: &Request, _arg: &fuse_fallocate_in) -> Result<()>
Allocate requested space.
Sourcefn read_dir_plus(
&self,
_request: &Request,
_arg: &fuse_read_in,
) -> Result<Vec<u8>>
fn read_dir_plus( &self, _request: &Request, _arg: &fuse_read_in, ) -> Result<Vec<u8>>
Reads the contents of a directory, and performs a lookup on each entry.
This function increases the lookup count of each entry in the directory by one.
If you implement this, you must set FUSE_DO_READDIRPLUS
in init
. If you implement both
read_dir_plus and read_dir, also set FUSE_READDIRPLUS_AUTO
.
Sourcefn lseek(
&self,
_request: &Request,
_fh: u64,
_offset: u64,
_whence: u32,
) -> Result<u64>
fn lseek( &self, _request: &Request, _fh: u64, _offset: u64, _whence: u32, ) -> Result<u64>
Find data holes in a sparse file.
Sourcefn copy_file_range(
&self,
_request: &Request,
_arg: &fuse_copy_file_range_in,
) -> Result<usize>
fn copy_file_range( &self, _request: &Request, _arg: &fuse_copy_file_range_in, ) -> Result<usize>
Copy data from one file to another without needing to send data through the FUSE kernel module.
Sourcefn setup_mapping(
&self,
request: &Request,
mapper: &dyn Mapper,
arg: &fuse_setupmapping_in,
) -> Result<()>
fn setup_mapping( &self, request: &Request, mapper: &dyn Mapper, arg: &fuse_setupmapping_in, ) -> Result<()>
Create a DAX memory mapping.