diff options
Diffstat (limited to 'example/hello.c')
-rw-r--r-- | example/hello.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/example/hello.c b/example/hello.c new file mode 100644 index 0000000..5cf75f4 --- /dev/null +++ b/example/hello.c @@ -0,0 +1,92 @@ +/* + FUSE: Filesystem in Userspace + Copyright (C) 2001 Miklos Szeredi (mszeredi@inf.bme.hu) + + This program can be distributed under the terms of the GNU GPL. + See the file COPYING. +*/ + +#include <fuse.h> +#include <stdio.h> +#include <errno.h> +#include <fcntl.h> + +static const char *hello_str = "Hello World!\n"; + +static int hello_getattr(const char *path, struct stat *stbuf) +{ + 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, "/hello") == 0) { + stbuf->st_mode = S_IFREG | 0644; + stbuf->st_nlink = 1; + stbuf->st_size = strlen(hello_str); + } + else + res = -ENOENT; + + return res; +} + +static int hello_getdir(const char *path, fuse_dirh_t h, fuse_dirfil_t filler) +{ + if(strcmp(path, "/") != 0) + return -ENOENT; + + filler(h, ".", 0); + filler(h, "..", 0); + filler(h, "hello", 0); + + return 0; +} + +static int hello_open(const char *path, int flags) +{ + if(strcmp(path, "/hello") != 0) + return -ENOENT; + + if((flags & 3) != O_RDONLY) + return -EACCES; + + return 0; +} + +static int hello_read(const char *path, char *buf, size_t size, off_t offset) +{ + if(strcmp(path, "/hello") != 0) + return -ENOENT; + + memcpy(buf, hello_str + offset, size); + return size; +} + +static struct fuse_operations null_oper = { + getattr: hello_getattr, + readlink: NULL, + getdir: hello_getdir, + mknod: NULL, + mkdir: NULL, + symlink: NULL, + unlink: NULL, + rmdir: NULL, + rename: NULL, + link: NULL, + chmod: NULL, + chown: NULL, + truncate: NULL, + utime: NULL, + open: hello_open, + read: hello_read, + write: NULL, +}; + +int main(int argc, char *argv[]) +{ + fuse_main(argc, argv, &null_oper); + return 0; +} |