#define FUSE_USE_VERSION 31
 
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <stddef.h>
#include <assert.h>
 
static struct options {
        const char *filename;
        const char *contents;
        int show_help;
} options;
 
#define OPTION(t, p)                           \
    { t, offsetof(struct options, p), 1 }
static const struct fuse_opt option_spec[] = {
 
        OPTION("--name=%s", filename),
        OPTION("--contents=%s", contents),
        OPTION("-h", show_help),
        OPTION("--help", show_help),
};
 
{
        (void) conn;
 
        
 
        return NULL;
}
 
static int hello_getattr(const char *path, struct stat *stbuf,
{
        (void) fi;
        int res = 0;
 
        memset(stbuf, 0, sizeof(struct stat));
        if (strcmp(path, "/") == 0) {
                stbuf->st_mode = S_IFDIR | 0755;
                stbuf->st_nlink = 2;
        } else if (strcmp(path+1, options.filename) == 0) {
                stbuf->st_mode = S_IFREG | 0444;
                stbuf->st_nlink = 1;
                stbuf->st_size = strlen(options.contents);
        } else
                res = -ENOENT;
 
        return res;
}
 
static int hello_readdir(
const char *path, 
void *buf, 
fuse_fill_dir_t filler,
 
{
        (void) fi;
        (void) flags;
 
        if (strcmp(path, "/") != 0)
                return -ENOENT;
 
 
        return 0;
}
 
{
        if (strcmp(path+1, options.filename) != 0)
                return -ENOENT;
 
        if ((fi->
flags & O_ACCMODE) != O_RDONLY)
 
                return -EACCES;
 
        return 0;
}
 
static int hello_read(
const char *path, 
char *buf, 
size_t size, off_t 
offset,
 
{
        size_t len;
        (void) fi;
        if(strcmp(path+1, options.filename) != 0)
                return -ENOENT;
 
        len = strlen(options.contents);
                memcpy(buf, options.contents + 
offset, size);
        } else
                size = 0;
 
        return size;
}
 
        .getattr        = hello_getattr,
        .readdir        = hello_readdir,
        .open           = hello_open,
        .read           = hello_read,
};
 
static void show_help(const char *progname)
{
        printf("usage: %s [options] <mountpoint>\n\n", progname);
        printf("File-system specific options:\n"
               "    --name=<s>          Name of the \"hello\" file\n"
               "                        (default: \"hello\")\n"
               "    --contents=<s>      Contents \"hello\" file\n"
               "                        (default \"Hello, World!\\n\")\n"
               "\n");
}
 
int main(int argc, char *argv[])
{
        int ret;
 
        
        options.filename = strdup("hello");
        options.contents = strdup("Hello World!\n");
 
        
                return 1;
 
        
        if (options.show_help) {
        }
 
        ret = fuse_main(args.
argc, args.
argv, &hello_oper, NULL);
        return ret;
}
int(* fuse_fill_dir_t)(void *buf, const char *name, const struct stat *stbuf, off_t off, enum fuse_fill_dir_flags flags)
#define FUSE_CAP_ASYNC_READ
int fuse_opt_add_arg(struct fuse_args *args, const char *arg)
void fuse_opt_free_args(struct fuse_args *args)
int fuse_opt_parse(struct fuse_args *args, void *data, const struct fuse_opt opts[], fuse_opt_proc_t proc)
#define FUSE_ARGS_INIT(argc, argv)
void *(* init)(struct fuse_conn_info *conn, struct fuse_config *cfg)