|
System.Posix.HFuse | Portability | GHC 6.8 | Stability | experimental | Maintainer | jeremy.bobbio@etu.upmc.fr |
|
|
|
|
|
Description |
HFuse is a binding for the FUSE (Filesystem in USErspace) library.
See http://fuse.sourceforge.net/
This library allow new filesystem implementation as simple user-land
programs.
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).
|
|
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 relult. For actions not using Either, you should return eOK in case
of success.
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
Haskell libraries.
|
|
module Foreign.C.Error |
|
|
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
buffer size.
- fuseGetDirectoryContents implements
System.Directory.getDirectoryContents (POSIX readddir(2)).
- fuseCreateDevice implements System.Posix.Files.createDevice
(POSIX mknod(2)).
This function will also be called for regular file creation.
- fuseCreateDirectory implements System.Posix.Directory.createDirectory
(POSIX mkdir(2)).
- fuseRemoveLink implements System.Posix.Files.removeLink
(POSIX unlink(2)).
- fuseRemoveDirectory implements System.Posix.Directory.removeDirectory
(POSIX rmdir(2)).
- fuseCreateSymbolicLink implements
System.Posix.Files.createSymbolicLink (POSIX symlink(2)).
- fuseRename implements System.Posix.Files.rename (POSIX rename(2)).
- fuseCreateLink implements System.Posix.Files.createLink
(POSIX link(2)).
- fuseSetFileMode implements System.Posix.Files.setFileMode
(POSIX chmod(2)).
- fuseSetOwnerAndGroup implements System.Posix.Files.setOwnerAndGroup
(POSIX chown(2)).
- fuseSetFileSize implements System.Posix.Files.setFileSize
(POSIX truncate(2)).
- fuseSetFileTimes implements System.Posix.Files.setFileTimes
(POSIX utime(2)).
- 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).
| Constructors | |
|
|
|
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,
System.Posix.Signals.lostConnection,
System.Posix.Signals.softwareTermination and
System.Posix.Signals.openEndedPipe ;
- 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.
|
|
Operations datatypes
|
|
|
|
|
|
Used by fuseGetDirectoryContents implementation to specify the type of
a directory entry.
| Constructors | Unknown | Unknown entry type
| NamedPipe | | CharacterSpecial | | Directory | | BlockSpecial | | RegularFile | | SymbolicLink | | Socket | |
|
|
|
|
Type used by the fuseGetFileSystemStats.
| Constructors | FileSystemStats | | 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.
| Constructors | FullSync | Synchronize all in-core parts of a file to disk: file content and
metadata.
| DataSync | Synchronize only the file content.
|
| Instances | |
|
|
FUSE Context
|
|
|
Returns the context of the program doing the current FUSE call.
|
|
|
|
|
File modes
|
|
|
Converts an EntryType into the corresponding POSIX FileMode.
|
|
OpenMode (ReadOnly, WriteOnly, ReadWrite) |
|
OpenFileFlags (OpenFileFlags, append, exclusive, noctty, nonBlock, trunc) |
|
intersectFileModes |
|
unionFileModes |
|
Produced by Haddock version 2.4.2 |