- fuse_main() (lib / helper.c) : FUSE userspace, program user memanggil fungsi fuse_main() yang memparsing parameters (seperti mountpoint, multithreaded), dan fungsi fuse_mount() dipanggil. Setelah itu panggil fuse_new(), mengalokasikan ruang untuk FUSE file system data. Setelah itu fungsi fuse_loop() dipanggil untuk memproses session.
- fuse_mount() (lib / mount.c) : menciptakan UNIX domain socket, kemudian di fork dan menciptakan proses-proses child yang menjalankan fusemount. Setelah menerima file handle untuk /dev/fuse dari fusermount, kirim file handle tersebut ke fuse_main()
- fusemount(util / fusermount.c) : untuk mengecek apakah modul FUSE sudah di load. Fusermount kemudian membuka /dev/fuse dan mengirim file handle melalui UNIX domain socket kembali ke fungsi fuse_mount().
- fuse_new() (lib / fuse.c) : menciptakan struktur data yang berisi ruang yang digunakan untuk menyimpan data file system.
- fuse_loop() (lib / fuse.c) (fuse_loop_mt() (lib / fuse_mt.c)) : membaca file system calls dari /dev/fuse, kemudian memanggil fungsi usermode yang disimpan di struct fuse_operations sebelum memanggil fuse_main(). Hasil dari panggilan tersebut ditulis kembali ke file /dev/fuse dimana hasil tersebut dapat di forward kembali ke system calls.
- int (*getattr) (const char *, struct stat *); Mendapatkan file atribut
- int (*readlink) (const char *, char *, size_t); Baca target link simbolik
- int (*mknod) (const char *, mode_t, dev_t); Membuat file node
- int (*mkdir) (const char *, mode_t); Membuat direktori
- int (*unlink) (const char *); Remove file
- int (*rmdir) (const char *); Remove direktori
- int (*rename) (const char *, const char *); Rename file
- int (*chmod) (const char *, mode_t); Mengubah bit izin file
- int (*chown) (const char *, uid_t, gid_t); Mengubah pemilik dan kelompok file
- int (*truncate) (const char *, off_t); Mengubah ukuran file
- int (*open) (const char *, struct fuse_file_info *); File open operation.
- int (*readdir) (const char *, void *, fuse_fill_dir_t, off_t, struct fuse_file_info *); Read directory
- int (*read) (const char *, char *, size_t, off_t, struct fuse_file_info *); Read data from an open file
- int (*write) (const char *, const char *, size_t, off_t, struct fuse_file_info *); Write data to an open file
Ganti bagian static const char *dirpath = "/home/kromatin/Downloads" dengan static const char *dirpath = "/home/[nama user kalian]/Downloads"
Simpan kemudian compile dengan menggunakan perintah: gcc
-Wall [nama file].c `pkg-config fuse --cflags --libs` -o [nama file]
Selain itu FUSE dapat dimodifikasi
misalnya dengan memodifikasi fungsi mkdir pada program diatas dengan
menambahkan system("notify-send hello") maka akan muncul notifikasi
dibagian kanan atas ketika fungsi mkdir dijalankan.
Compile dengan cara yang sama seperti diatas. Maka outputnya seperti dibawah ini
Thank you.. :) :) :)