Haii bloger
sekalian, ketemu lagi nih sama nay. Apa kabar nih bulan novembernya?
Sehat saja? Senang saja? Ada yang galau kah? Atau mungkin ada yang
sedang berbahagia sekaraang? Hoho, pokonya apapun yang kalian lakukan
sekarang semoga berkaahhhh. Yak di apdetan kali ini nay akan kembali
mengenalkan tentang sistem operasi ke kaliaan. Hari ini akan nay
bahas mengenai fuse.
Sebelumnya nay akan
menjelaskan mengenai file system. File system adalah adalah struktur
logika yang digunakan untuk mengendalikan akses terhadap data yang
ada pada harddisk. Terdapat berbagai jenis-jenisnya dan penggunaan
algoritma yang berbeda. File system memiliki beberapa tipe yang
pertama adalah File System Disk, File System Flash, File System
Database, File System Transaksional, File System Jaringan, File
System untuk tujuan khusus, dan File System Journaling.
Kalau membahas
mengenai fuseakan berhubungan juga dengan virtual file system,
dentry, superblock, inode dan banyak lainnya. Oke fuse adalah
mekanisme sistem operasi untuk sistem operasi Unix-like yang
memungkinkan pengguna tidak ber-hak istimewa menciptakan file system
mereka sendiri tanpa mengubah kode kernel. Module kernel FUSE dan
FUSE library berhubungan melalui sebuah special file descriptor yang
didapatkan dengan membuka /dev/fuse. FUSE kernal module meneruskan
request ke aplikasi fuse anda.
Sekarang nay akan
menjelaskan mengenai system menggunakan fuse. Pertama yang harus
kalian lakukan adalah membuat fuse seperti di bawah ini
#include <fuse.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include
<sys/statfs.h>
#include <stdlib.h>
static const char
*dirpath = "/home/nadia/Downloads";
static int
xmp_getattr(const char *path, struct stat *stbuf)
{
int res;
char fpath[1000];
sprintf(fpath,"%s%s",dirpath,path);
res = lstat(fpath,
stbuf);
if(res == -1)
{
return -errno;
}
return 0;
}
static int
xmp_getdir(const char *path, fuse_dirh_t h, fuse_dirfil_t filler)
{
char fpath[1000];
if(strcmp(path,"/")
== 0)
{
path=dirpath;
sprintf(fpath,"%s",path);
}
else sprintf(fpath,
"%s%s",dirpath,path);
int res = 0;
DIR *dp;
struct dirent *de;
dp =
opendir(fpath);
if(dp==NULL)
{
return -errno;
}
while((de =
readdir(dp))!=NULL)
{
res = filler(h,
de->d_name, de->d_type);
if(res!=0) break;
}
system("notify-send
hello");
closedir(dp);
return res;
}
static int
xmp_mkdir(const char *path, mode_t mode)
{
int res;
res =
mkdir(path, mode);
if (res ==
-1)
return -errno;
return 0;
}
static struct
fuse_operations xmp_oper =
{
.getattr =
xmp_getattr,
//.readlink =
xmp_readlink,
.getdir =
xmp_getdir,
//.mknod =
xmp_mknod,
.mkdir =
xmp_mkdir,
//.symlink =
xmp_symlink,
//.unlink =
xmp_unlink,
//.rmdir =
xmp_rmdir,
//.rename =
xmp_rename,
//.link =
xmp_link,
//.chmod =
xmp_chmod,
//.chown =
xmp_chown,
//.truncate =
xmp_truncate,
//.utime =
xmp_utime,
//.open =
xmp_open,
//.read =
xmp_read,
//.write =
xmp_write,
//.release =
xmp_release,
//.fsync =
xmp_fsync,
//.readdir =
hello_readdir
};
int main(int argc,
char *argv[])
{
return
fuse_main(argc, argv, &xmp_oper);
}
untuk menjalanakan
fuse di terminal dengan menggunakan syntax
gcc -Wall [nama
file].c `pkg-config fuse --cflags --libs` -o [nama file]
Kemudian buat sebuah
direktori, misalnya: /tmp/fuse
Coba jalankan fuse
tadi dengan cara: ./[nama file] /tmp/fuse
nah segitu dulu
bincang bincang dari nay, see ya in next blog hehe. Tetep semnagat
yah besok senin lhooo hehehehe.
Komentar
Posting Komentar