HFuse is a binding for the FUSE (Filesystem in USErspace) library.
This library allow new filesystem implementation as simple user-land
The binding tries to follow as much as possible current Haskell POSIX
interface in System.Posix.Files and System.Posix.Directory.
FUSE uses POSIX thread, thus Haskell implementation needs to be linked
against a threaded runtime system (eg. using the threaded GHC option).
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 relult. For actions not using Either, you should return eOK in case
Read and writes are done with Haskell String type. Even if this representation
is known to have drawbacks, the binding try to be coherent with current
This record, given to fuseMain, binds each required file system operations.
Each field is named against System.Posix names. Matching Linux system calls
are also given as a reference.
- fuseGetFileStat implements
System.Posix.Files.getSymbolicLinkStatus operation (POSIX lstat(2)).
- fuseReadSymbolicLink implements
System.Posix.Files.readSymbolicLink operation (POSIX readlink(2)).
The returned FilePath might be truncated depending on caller
- fuseGetDirectoryContents implements
System.Directory.getDirectoryContents (POSIX readddir(2)).
- fuseCreateDevice implements System.Posix.Files.createDevice
This function will also be called for regular file creation.
- fuseCreateDirectory implements System.Posix.Directory.createDirectory
- fuseRemoveLink implements System.Posix.Files.removeLink
- fuseRemoveDirectory implements System.Posix.Directory.removeDirectory
- fuseCreateSymbolicLink implements
System.Posix.Files.createSymbolicLink (POSIX symlink(2)).
- fuseRename implements System.Posix.Files.rename (POSIX rename(2)).
- fuseCreateLink implements System.Posix.Files.createLink
- fuseSetFileMode implements System.Posix.Files.setFileMode
- fuseSetOwnerAndGroup implements System.Posix.Files.setOwnerAndGroup
- fuseSetFileSize implements System.Posix.Files.setFileSize
- fuseSetFileTimes implements System.Posix.Files.setFileTimes
- fuseOpen implements System.Posix.Files.openFd
(POSIX open(2)), but this does not actually returns a file handle
but eOK if the operation is permitted with the given flags.
No creation, exclusive access or truncating flags will be passed.
- fuseRead implements Unix98 pread(2). It differs
from System.Posix.Files.fdRead by the explicit FileOffset argument.
- fuseWrite implements Unix98 pwrite(2). It differs
from System.Posix.Files.fdWrite by the explicit FileOffset argument.
- fuseGetFileSystemStats implements statfs(2).
- fuseFlush is called when close(2) has been called on an open file.
Note: this does not mean that the file is released. This function may be
called more than once for each open(2). The return value is passed on
to the close(2) system call.
- fuseRelease is called when an open file has all file descriptors closed
and all memory mappings unmapped. For every open call there will be
exactly one release call with the same flags. It is possible to have
a file opened more than once, in which case only the last release will
mean, that no more reads or writes will happen on the file.
- fuseSynchronizeFile implements fsync(2).
|Empty / default versions of the FUSE operations.
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 System.Posix.Signals.keyboardSignal,
- registers an exit handler to unmount the filesystem on program exit ;
- registers the operations ;
- calls FUSE event loop.
|Default exception handler.
Print the exception on error output and returns eFAULT.
|Used by fuseGetDirectoryContents implementation to specify the type of
a directory entry.
|Unknown||Unknown entry type
|Type used by the fuseGetFileSystemStats.
|fsStatBlockSize :: Integer||Optimal transfer block size. FUSE default is 512.
|fsStatBlockCount :: Integer||Total data blocks in file system.
|fsStatBlocksFree :: Integer||Free blocks in file system.
|fsStatBlocksAvailable :: Integer||Free blocks available to non-superusers.
|fsStatFileCount :: Integer||Total file nodes in file system.
|fsStatFilesFree :: Integer||Free file nodes in file system.
|fsStatMaxNameLength :: Integer||Maximum length of filenames. FUSE default is 255.
|Used by fuseSynchronizeFile.
|FullSync||Synchronize all in-core parts of a file to disk: file content and
|DataSync||Synchronize only the file content.
|Returns the context of the program doing the current FUSE call.
|Converts an EntryType into the corresponding POSIX FileMode.
|OpenMode (ReadOnly, WriteOnly, ReadWrite)|
|OpenFileFlags (OpenFileFlags, append, exclusive, noctty, nonBlock, trunc)|
|Produced by Haddock version 2.4.2|