HFuse-0.2.5.0: HFuse is a binding for the Linux FUSE library.

Copyright(c) Jérémy Bobbio Taru Karttunen
LicenseBSD-style
MaintainerMontez Fitzpatrick
Stabilityexperimental
PortabilityGHC 6.4-7.8.2
Safe HaskellNone
LanguageHaskell2010

System.Fuse

Contents

Description

A binding for the FUSE (Filesystem in USErspace) library (http://fuse.sourceforge.net/), which allows filesystems to be implemented as userspace processes.

The binding tries to follow as much as possible current Haskell POSIX interface in System.Posix.Files and System.Posix.Directory.

FUSE uses POSIX threads, so any Haskell application using this library must be linked against a threaded runtime system (eg. using the threaded GHC option).

Synopsis

Using FUSE

FuseOperations contains a field for each filesystem operations that can be called by FUSE. Think like if you were implementing a file system inside the Linux kernel.

Each actions must return a POSIX error code, also called Errno reflecting operation result. For actions not using Either, you should return eOK in case of success.

Read and writes are done with Haskell ByteString type.

data FuseOperations fh Source #

This record, given to fuseMain, binds each required file system operations.

Each field is named against Posix names. Matching Linux system calls are also given as a reference.

fh is the file handle type returned by fuseOpen and subsequently passed to all other file operations.

Constructors

FuseOperations 

Fields

defaultFuseOps :: FuseOperations fh Source #

Empty / default versions of the FUSE operations.

fuseMain :: Exception e => FuseOperations fh -> (e -> IO Errno) -> IO () Source #

Main function of FUSE. This is all that has to be called from the main function. On top of the FuseOperations record with filesystem implementation, you must give an exception handler converting Haskell exceptions to Errno.

This function does the following:

  • parses command line options (-d, -s and -h) ;
  • passes all options after -- to the fusermount program ;
  • mounts the filesystem by calling fusermount ;
  • installs signal handlers for keyboardSignal, lostConnection, softwareTermination and openEndedPipe ;
  • registers an exit handler to unmount the filesystem on program exit ;
  • registers the operations ;
  • calls FUSE event loop.

fuseRun :: String -> [String] -> Exception e => FuseOperations fh -> (e -> IO Errno) -> IO () Source #

fuseMainInline :: Exception e => (Fd -> IO () -> IO b) -> (b -> IO ()) -> (Either String () -> IO a) -> FuseOperations fh -> (e -> IO Errno) -> IO a Source #

Inline version of fuseMain. This prevents exiting and keeps the fuse file system in the same process (and therefore memory space)

fuseRunInline :: Exception e => (Fd -> IO () -> IO b) -> (b -> IO ()) -> (Either String () -> IO a) -> String -> [String] -> FuseOperations fh -> (e -> IO Errno) -> IO a Source #

defaultExceptionHandler :: SomeException -> IO Errno Source #

Default exception handler. Print the exception on error output and returns eFAULT.

Operations datatypes

data FileStat Source #

Used by fuseGetFileStat. Corresponds to struct stat from stat.h; st_dev, st_ino and st_blksize are omitted, since (from the libfuse documentation): "the st_dev and st_blksize fields are ignored. The st_ino field is ignored except if the use_ino mount option is given."

TODO: at some point the inode field will probably be needed.

data EntryType Source #

The Unix type of a node in the filesystem.

data FileSystemStats Source #

Type used by the fuseGetFileSystemStats.

Constructors

FileSystemStats 

Fields

data SyncType Source #

Constructors

FullSync

Synchronize all in-core parts of a file to disk: file content and metadata.

DataSync

Synchronize only the file content.

FUSE Context

getFuseContext :: IO FuseContext Source #

Returns the context of the program doing the current FUSE call.

File modes

entryTypeToFileMode :: EntryType -> FileMode Source #

Converts an EntryType into the corresponding POSIX FileMode.

data OpenMode :: * #

Constructors

ReadOnly 
WriteOnly 
ReadWrite 

data OpenFileFlags :: * #

Correspond to some of the int flags from C's fcntl.h.

Constructors

OpenFileFlags 

Fields

intersectFileModes :: FileMode -> FileMode -> FileMode #

Combines two file modes into one that only contains modes that appear in both.

unionFileModes :: FileMode -> FileMode -> FileMode #

Combines the two file modes into one that contains modes that appear in either.