aboutsummaryrefslogtreecommitdiff
path: root/doc/mainpage.dox
blob: 36ba3bcba268a8a9e74f355438b8954f87d7a3ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/*!
\mainpage libfuse API documentation

FUSE (Filesystem in Userspace) is an interface for userspace programs
to export a filesystem to the Linux kernel. The FUSE project consists
of two components: the *fuse* kernel module (maintained in the regular
kernel repositories) and the *libfuse* userspace library. libfuse
provides the reference implementation for communicating with the FUSE
kernel module.

A FUSE file system is typically implemented as a standalone
application that links with libfuse. libfuse provides functions to
mount the file system, unmount it, read requests from the kernel, and
send responses back.


## Getting started ##

libfuse offers two APIs: a "high-level", synchronous API, and a
"low-level" asynchronous API. In both cases, incoming requests from
the kernel are passed to the main program using callbacks. When using
the high-level API, the callbacks may work with file names and paths
instead of inodes, and processing of a request finishes when the
callback function returns. When using the low-level API, the callbacks
must work with inodes and responses must be sent explicitly using a
separate set of API functions.

The high-level API that is primarily specified in fuse.h. The
low-level API that is primarily documented in fuse_lowlevel.h.

## Examples ##

FUSE comes with several examples in the <a
href="files.html">examples</a> directory. A good starting point are
hello.c (for the high-level API) and hello_ll.c (for the low-level
API).

## FUSE internals ##

The authoritative source of information about libfuse internals
(including the protocol used for communication with the FUSE kernel
module) is the source code.

However, some people have kindly documented different aspects of FUSE
in a more beginner friendly way. While this information is
increasingly out of date, it still provides a good overview:

- Bharat Vangoor et al have included an overview of the FUSE internals
  in a <a href="fast17-vangoor.pdf">paper evaluating FUSE performance</a>.

- Some documentation of the kernel-userspace protocol is available on
  the <a href="https://github.com/libfuse/libfuse/wiki/">libfuse wiki</a>.

*/