Private Data

One more piece of information on using FUSE that's very helpful is how it lets you store and access data that you've defined.

FUSE has a struct fuse_context which contains a little bit of extra information about a filesystem. One very useful field in this struct is void* private_data, a pointer to arbitrary data stored by your filesystem.

From inside any FUSE operation, it's possible to obtain the context by calling fuse_get_context(); this means we can use fuse_get_context()->private_data to get the private data.

We can see how to use this by looking at my log_msg() function. Here it is:

void log_msg(const char *format, ...)
    va_list ap;
    va_start(ap, format);

    vfprintf(BB_DATA->logfile, format, ap);

It uses a macro I defined:

#define BB_DATA ((struct bb_state *) fuse_get_context()->private_data)

to obtain the private data field and cast it to a struct bb_state *.

You can see how I created the struct bb_struct by looking at params.h where I defined the struct:

struct bb_state {
    FILE *logfile;
    char *rootdir;

It has two fields: the FILE* for the log file, and the path to the directory we're accessing through BBFS.

I malloc() the structure and set the values of the fields in my main() function (see last section) so they'll be available to me later.

Next: Extra Information About Unclear Functions

Last modified: Thu Jun 12 18:14:08 MDT 2014