class FuseFS::FuseDir

This class is equivalent to using Object.new() as the virtual directory for target for {FuseFS.start}. It exists primarily to document the API but can also be used as a superclass for your filesystem providing sensible defaults

Method call sequences

Stat (getattr)

FUSE itself will generally stat referenced files and validate the results before performing any file/directory operations so this sequence is called very often

  1. {#directory?} is checked first

    • {#can_write?} OR {#can_mkdir?} with ._rfusefs_check_ to determine write permissions

    • {#times} is called to determine atime,mtime,ctime info for the directory

  2. {#file?} is checked next

    • {#can_write?}, {#executable?}, {#size}, {#times} are called to fill out the details

  3. otherwise we tell FUSE that the path does not exist

List directory

FUSE confirms the path is a directory (via stat above) before we call {#contents}

FUSE will generally go on to stat each directory entry in the results

Reading files

FUSE confirms path is a file before we call {#read_file}

For fine control of file access see {#raw_open}, {#raw_read}, {#raw_close}

Writing files

FUSE confirms path for the new file is a directory

See also {#raw_open}, {#raw_truncate}, {#raw_write}, {#raw_sync}, {#raw_close}

Deleting files

FUSE confirms path is a file before we call {#can_delete?} then {#delete}

Creating directories

FUSE confirms parent is a directory before we call {#can_mkdir?} then {#mkdir}

Deleting directories

FUSE confirms path is a directory before we call {#can_rmdir?} then {#rmdir}

Renaming files and directories

FUSE confirms the rename is valid (eg. not renaming a directory to a file)

Signals

The filesystem can handle a signal by providing a `sig<name>` method. eg 'sighup' {#sigint} and {#sigterm} are handled by default to provide a means to exit the filesystem

Constants

INIT_TIMES

@!method sigterm()

@return [void]
Handle the TERM signal and exit the filesystem

Public Instance Methods

can_delete?(path) click to toggle source

@abstract FuseFS api @return [Boolean] true if the user can delete the file at path

# File lib/fuse/fusedir.rb, line 202
def can_delete?(path);return false;end
can_mkdir?(path) click to toggle source

@abstract FuseFS api @return [Boolean] true if user can make a directory at path

# File lib/fuse/fusedir.rb, line 211
def can_mkdir?(path);return false;end
can_rmdir?(path) click to toggle source

@abstract FuseFS api @return [Boolean] true if user can remove a directory at path

# File lib/fuse/fusedir.rb, line 220
def can_rmdir?(path);return false;end
can_write?(path) click to toggle source

@abstract FuseFS api @return [Boolean] true if the user can write to file at path

# File lib/fuse/fusedir.rb, line 193
def can_write?(path);return false;end
contents(path) click to toggle source

@abstract FuseFS api @return [Array<String>] array of file and directory names within path

# File lib/fuse/fusedir.rb, line 171
def contents(path);return [];end
delete(path) click to toggle source

Delete the file at path @abstract FuseFS api @return [void]

# File lib/fuse/fusedir.rb, line 207
def delete(path);end
directory?(path) click to toggle source

@abstract FuseFS api @return [Boolean] true if path is a directory

# File lib/fuse/fusedir.rb, line 163
def directory?(path);return false;end
executable?(path) click to toggle source

@abstract FuseFS api @return [Boolean] true if path is an executable file

# File lib/fuse/fusedir.rb, line 175
def executable?(path);return false;end
file?(path) click to toggle source

@abstract FuseFS api @return [Boolean] true if path is a file

# File lib/fuse/fusedir.rb, line 167
def file?(path);end
mkdir(path) click to toggle source

Make a directory at path @abstract FuseFS api @return [void]

# File lib/fuse/fusedir.rb, line 216
def mkdir(path);end
mounted() click to toggle source

RFuseFS extension. Called when the filesystem is mounted @return [void]

# File lib/fuse/fusedir.rb, line 317
def mounted();end
raw_close(path,raw=nil) click to toggle source

Close the file previously opened at path (or filehandle raw) @abstract FuseFS api @return [void]

# File lib/fuse/fusedir.rb, line 293
def raw_close(path,raw=nil);end
raw_open(path,mode,rfusefs = nil) click to toggle source

Raw file access

@abstract FuseFS api @param mode [String] “r”,“w” or “rw”, with “a” if file is opened for append @param rfusefs [Boolean] will be “true” if RFuseFS extensions are available @return [nil] to indicate raw operations are not implemented @return [Object] a filehandle

Under RFuseFS this object will be passed back in to the other raw
methods as the optional parameter _raw_
# File lib/fuse/fusedir.rb, line 247
def raw_open(path,mode,rfusefs = nil);end
raw_read(path,offset,size,raw=nil) click to toggle source

Read sz bytes from file at path (or filehandle raw) starting at offset off

@param [String] path @param [Integer] offset @param [Integer] size @param [Object] raw the filehandle returned by {#raw_open} @abstract FuseFS api @return [String] sz bytes contents from file at path (or filehandle raw) starting at offset off

# File lib/fuse/fusedir.rb, line 276
def raw_read(path,offset,size,raw=nil);end
raw_sync(path,datasync,raw=nil) click to toggle source

Sync buffered data to your filesystem @param [String] path @param [Boolean] datasync only sync user data, not metadata @param [Object] raw the filehandle return by {#raw_open}

# File lib/fuse/fusedir.rb, line 288
def raw_sync(path,datasync,raw=nil);end
raw_truncate(path,offset,raw=nil) click to toggle source

RFuseFS extension. @abstract FuseFS api

@overload raw_truncate(path,offset,raw)

Truncate an open file to offset bytes
@param [String] path
@param [Integer] offset
@param [Object] raw the filehandle returned from {#raw_open}
@return [void]

@overload raw_truncate(path,offset)

Optionally truncate a file to offset bytes directly
@param [String] path
@param [Integer] offset
@return [Boolean]
  if truncate has been performed, otherwise the truncation will be performed with {#read_file} and {#write_to}
# File lib/fuse/fusedir.rb, line 266
def raw_truncate(path,offset,raw=nil);end
raw_write(path,off,sz,buf,raw=nil) click to toggle source

Write sz bytes from file at path (or filehandle raw) starting at offset off @abstract FuseFS api @return [void]

# File lib/fuse/fusedir.rb, line 281
def raw_write(path,off,sz,buf,raw=nil);end
read_file(path) click to toggle source

@abstract FuseFS api @return [String] the contents of the file at path

# File lib/fuse/fusedir.rb, line 189
def read_file(path);return "";end
rename(from_path,to_path) click to toggle source

Move a file or directory. @abstract FuseFS api @return [Boolean] true to indicate the rename has been handled,

otherwise will fallback to copy/delete
# File lib/fuse/fusedir.rb, line 236
def rename(from_path,to_path);end
rmdir(path) click to toggle source

Remove the directory at path @abstract FuseFS api @return [void]

# File lib/fuse/fusedir.rb, line 225
def rmdir(path);end
scan_path(path) click to toggle source
base,*rest = scan_path(path)

@return [Array<String>] all directory and file elements in path. Useful

when encapsulating an entire fs into one object
# File lib/fuse/fusedir.rb, line 157
def scan_path(path)
    path.scan(/[^\/]+/)
end
size(path) click to toggle source

File size @abstract FuseFS api @return [Integer] the size in byte of a file (lots of applications rely on this being accurate )

# File lib/fuse/fusedir.rb, line 180
def size(path); read_file(path).length ;end
split_path(path) click to toggle source
base,rest = split_path(path)

@return [Array<String,String>] base,rest. base is the first directory in

path, and rest is nil> or the remaining path.
Typically if rest is not nil? you should 
recurse the paths
# File lib/fuse/fusedir.rb, line 145
def split_path(path)
    cur, *rest = path.scan(/[^\/]+/)
    if rest.empty?
        [ cur, nil ]
    else
        [ cur, File::SEPARATOR + File.join(rest) ]
    end
end
statistics(path) click to toggle source

RFuseFS extensions. File system statistics @param [String] path @return [Array<Integer>] the statistics

used_space (in bytes), used_files, max_space, max_files
See {StatsHelper}

@return [RFuse::StatVfs] or raw statistics @abstract FuseFS api

# File lib/fuse/fusedir.rb, line 312
def statistics(path); [0,0,0,0]; end
times(path) click to toggle source

File time information. RFuseFS extension. @abstract FuseFS api @return [Array<Integer, Time>] a 3 element array [ atime, mtime. ctime ] (good for rsync etc)

# File lib/fuse/fusedir.rb, line 185
def times(path);return INIT_TIMES;end
touch(path,modtime) click to toggle source

Neat toy. Called when a file is touched or has its timestamp explicitly modified @abstract FuseFS api @return [void]

# File lib/fuse/fusedir.rb, line 230
def touch(path,modtime);end
unmounted() click to toggle source

RFuseFS extension. Called when the filesystem is unmounted @return [void]

# File lib/fuse/fusedir.rb, line 322
def unmounted();end
write_to(path,str) click to toggle source

Write the contents of str to file at path @abstract FuseFS api @return [void]

# File lib/fuse/fusedir.rb, line 198
def write_to(path,str);end
xattr(path) click to toggle source

RFuseFS extension. Extended attributes. @param [String] path @return [Hash] extended attributes for this path.

The returned object  will be manipulated directly using :[] :[]=,, :keys and :delete
so the default (a new empty hash on every call) will not retain attributes that are set

@abstract FuseFS api

# File lib/fuse/fusedir.rb, line 302
def xattr(path); {} ; end