Skip to content

Instantly share code, notes, and snippets.

@vdudouyt
Last active March 21, 2021 18:29
Show Gist options
  • Save vdudouyt/6238113 to your computer and use it in GitHub Desktop.
Save vdudouyt/6238113 to your computer and use it in GitHub Desktop.
A minimal working FUSE filesystem
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fuse.h>
// Synopsis:
// gcc fuse_minimal.c -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 `pkg-config --cflags --libs fuse` -o fuse_minimal
// ./fuse_minimal -f /mnt/fuse_minimal
int fuse_getattr(const char *path, struct stat *statbuf);
int fuse_opendir(const char *path, struct fuse_file_info *fi);
int fuse_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset,
struct fuse_file_info *fi);
struct fuse_operations fuse_oper = {
.getattr = fuse_getattr,
.opendir = fuse_opendir,
.readdir = fuse_readdir,
};
int fuse_getattr(const char *path, struct stat *statbuf)
{
printf("getattr path=%s\n", path);
memset(statbuf, 0, sizeof(statbuf));
statbuf->st_dev = 2049;
statbuf->st_ino = 14450705;
statbuf->st_mode = 040775;
statbuf->st_nlink = 2;
statbuf->st_uid = 1000;
statbuf->st_gid = 1000;
statbuf->st_rdev = 0;
statbuf->st_size = 4096;
statbuf->st_blksize = 4096;
statbuf->st_blocks = 8;
time(&(statbuf->st_atime));
time(&(statbuf->st_mtime));
time(&(statbuf->st_ctime));
return(0);
}
int fuse_opendir(const char *path, struct fuse_file_info *fi)
{
printf("opendir path=%s\n", path);
return(0);
}
int fuse_readdir(const char *path, void *buf, fuse_fill_dir_t filler, off_t offset,
struct fuse_file_info *fi)
{
printf("readdir path=%s\n", path);
filler(buf, "11", NULL, 0);
}
int main(int argc, char *argv[])
{
if(argc < 2) {
printf("Wrong usage\n");
exit(-1);
}
return( fuse_main(argc, argv, &fuse_oper, NULL) );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment