File System dan Kamar yang Berantakan
FUSE! Iya, keren. Walaupun terdengar seperti ada yang akan bergabung dan membentuk sebuah kekuatan baru, namun kenyataannya tidak begitu. FUSE dalam konteks sistem operasi Linux merupakan sebuah file system. Filesystem in Userspace.
Apa sih File System itu?
Jadi simpelnya (semoga beneran simpel) begini, kalian tentu pernah buka windows explorer kan? Atau mungkin ada yang pernah membuka aplikasi penelusur file di sistem operasi lain? Nah jadi si windows explorer yang kalian lihat itu tentu ada yang namanya folder dan file, seolah-olah di komputer kamu ada beberapa tumpukan dokumen (file) yang dikumpulkan dalam sebuah laci (file). Kalau kamu butuh dokumennya, tinggal cari laci tempat dimana kamu menaruh dokumen tersebut. Namun tahu kah kalian? Kalau file dan folder yang kamu lihat itu hanyalah ilusi belaka? Kebetulan? Saya rasa tidak!
File dan folder yang kalian lihat di depan layar komputer itu sebenarnya hanyalah penampilan luar dari apa yang sebenarnya terjadi di dalam komputer kita. Kalau kamu adalah seseorang yang rapi, kamu pasti sangat telaten dalam mengelompokkan file dalam folder-folder tertentu, sehingga terlihat rapi. Namun tahukah kamu? Serapi apa pun kalian menata file dan folder di komputermu, sebenarnya dalam hardisk/flashdisk/CD tempat kalian menaruh file dan folder, posisi "asli"nya tetap lah "berantakan". Namun jangan khawatir, komputer tidak akan "lupa" posisi dimana dia menaruh data-data kalian. Hal ini karena adanya File System.
Ibaratnya sebuah kamar. Anggap sebuah ruangan kamar adalah harddisk pada komputer kita. Dan barang-barang di dalam kamar adalah file dan folder. Karena komputer tidak punya otak yang secemerlang manusia, komputer tidak lah bisa caranya merapikan kamarnya sendiri. Barang apapun yang masuk ke kamarnya, akan ditaruh berjejer begitu saja. Pokoknya asal muat, masukin aja. Alhasil kamarnya sudah dipenuhi berbagai macam barang yang sangat tidak teratur. Ada lemari di atas televisi, gunting di bawah tempat tidur, bahkan kolor tergantung di langit-langit. Nah kerennya, separah apapun si komputer menaruh barangnya, dia akan selalu ingat posisi barangnya saat dia membutuhkan. Dan juga seperti apapun bentuknya, misalnya lemari kotak atau segitiga atau lingkaran, komputer akan tetap mengenali benda itu sebagai lemari. Kenapa? Karena komputer punya sebuah catatan yang sangat lengkap tentang seluruh keberadaan barangnya, catatan itu adalah File System. Setiap ada barang baru masuk, akan dicatat di File System.
Oh gitu!
Yak, dan file system itu ada banyak macamnya. Apalagi file system untuk linux, banyak orang yang membuat file system untuk sistem operasi open-source itu. Salah satu yang populer adalah FUSE. Untuk informasi dan dokumentasi yang lengkap, teman-teman bisa mengunjungi website developernya langsung di http://fuse.sourceforge.net/.
Kenapa saya menyarankan FUSE?
- Librarynya lebih simpel
- Instalasi lebih simpel
- Aman
- Sangat efisien untuk pengguna
- Bahkan untuk pengguna tanpa kemampuan teknis yang tinggi
- Bisa dijalankan di Linux kernel 2.4.x dan 2.6.x
- Dan yang terpenting, stabil bos!
/*Untuk variabel dirpath, kalian bisa ganti sesuka kalian. Sesuaikan dengan path pada linux kalian masing-masing ya. Setelah selesai dengan source code, save file dan compile dengan syntax gcc -Wall [nama file].c `pkg-config fuse --cflags --libs` -o [nama file].
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.
*/
#ifdef linux
/* For pread()/pwrite() */
#define _XOPEN_SOURCE 500
#endif
#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>
static const char *dirpath = "/home/wira";
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_readlink(const char *path, char *buf, size_t size)
{
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
res = readlink(fpath, buf, size - 1);
if(res == -1)
return -errno;
buf[res] = '\0';
return 0;
}
static int xmp_getdir(const char *path, fuse_dirh_t h, fuse_dirfil_t filler)
{
DIR *dp;
struct dirent *de;
int res = 0;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
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;
}
closedir(dp);
return res;
}
static int xmp_mknod(const char *path, mode_t mode, dev_t rdev)
{
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
res = mknod(fpath, mode, rdev);
if(res == -1)
return -errno;
return 0;
}
static int xmp_mkdir(const char *path, mode_t mode)
{
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
res = mkdir(fpath, mode);
if(res == -1)
return -errno;
return 0;
}
static int xmp_unlink(const char *path)
{
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
res = unlink(fpath);
if(res == -1)
return -errno;
return 0;
}
static int xmp_rmdir(const char *path)
{
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
res = rmdir(fpath);
if(res == -1)
return -errno;
return 0;
}
static int xmp_symlink(const char *from, const char *to)
{
int res;
char fpath [1000], ffrom[1000],fto[1000];
sprintf(fto,"%s%s",dirpath,to);
sprintf(ffrom,"%s%s",dirpath,from);
res = symlink(ffrom, fto);
if(res == -1)
return -errno;
return 0;
}
static int xmp_rename(const char *from, const char *to)
{
int res;
char fpath [1000], ffrom[1000],fto[1000];
sprintf(fto,"%s%s",dirpath,to);
sprintf(ffrom,"%s%s",dirpath,from);
res = rename(ffrom, fto);
if(res == -1)
return -errno;
return 0;
}
static int xmp_link(const char *from, const char *to)
{
int res;
char fpath [1000], ffrom[1000],fto[1000];
sprintf(fto,"%s%s",dirpath,to);
sprintf(ffrom,"%s%s",dirpath,from);
res = link(ffrom, fto);
if(res == -1)
return -errno;
return 0;
}
static int xmp_chmod(const char *path, mode_t mode)
{
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
res = chmod(fpath, mode);
if(res == -1)
return -errno;
return 0;
}
static int xmp_chown(const char *path, uid_t uid, gid_t gid)
{
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
res = lchown(fpath, uid, gid);
if(res == -1)
return -errno;
return 0;
}
static int xmp_truncate(const char *path, off_t size)
{
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
res = truncate(fpath, size);
if(res == -1)
return -errno;
return 0;
}
static int xmp_utime(const char *path, struct utimbuf *buf)
{
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
res = utime(fpath, buf);
if(res == -1)
return -errno;
return 0;
}
static int xmp_open(const char *path, int flags)
{
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
res = open(fpath, flags);
if(res == -1)
return -errno;
close(res);
return 0;
}
static int xmp_read(const char *path, char *buf, size_t size, off_t offset)
{
int fd;
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
fd = open(fpath, O_RDONLY);
if(fd == -1)
return -errno;
res = pread(fd, buf, size, offset);
if(res == -1)
res = -errno;
close(fd);
return res;
}
static int xmp_write(const char *path, const char *buf, size_t size,
off_t offset)
{
int fd;
int res;
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
fd = open(fpath, O_WRONLY);
if(fd == -1)
return -errno;
res = pwrite(fd, buf, size, offset);
if(res == -1)
res = -errno;
close(fd);
return res;
}
static int xmp_release(const char *path, int flags)
{
/* Just a stub. This method is optional and can safely be left
unimplemented */
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
(void) fpath;
(void) flags;
return 0;
}
static int xmp_fsync(const char *path, int isdatasync)
{
/* Just a stub. This method is optional and can safely be left
unimplemented */
char fpath [1000];
sprintf(fpath,"%s%s",dirpath,path);
(void) fpath;
(void) isdatasync;
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
};
int main(int argc, char *argv[])
{
fuse_main(argc, argv, &xmp_oper);
return 0;
}
Kemudian jalankan dengan perintah ./[nama file] /tmp/fuse
Apa yang terjadi? Maka seluruh isi dari direktori pada variabel dirpath di atas, akan dimuat ke folder /tmp/fuse. Untuk mengecek, kalian bisa masuk ke folder tmp (melalui root), kemudian buka folder fuse.
Sekian cuap-cuap saya kali ini. Semoga saya tidak tambah sotoy, dan semoga ilmunya bermanfaat.
Yak sekali lagi saya akan memposting sesuatu yang berbau Linux. Mungkin postingan ini akan jadi postingan terakhir saya yang membahas cara-...
Program Sederhana Pengelola Stok Barang di Terminal Linux
Halo teman-teman! Kali ini saya akan memberikan tutorial singkat tentang cara membuat sebuah program untuk mengelola stok barang di sebuah toko komputer.2:57 AM
Halo teman-teman! Kali ini saya akan memberikan tutorial singkat tentang cara membuat sebuah program untuk mengelola stok barang di sebuah t...
Bash Script: Cara Asik Menikmati Linux
Jeng! Ceritanya pelajar gila hari ini sedang ingin sok pintar. Beberapa waktu lalu aku mencoba untuk menginstall salah satu sistem operasi yang bernama Linux (Ubuntu). Dan ternyata keren juga loh! Dan salah satu cara menikmati Linux adalah dengan mengoperasikannya lewat terminal.3:13 PM
Jeng! Ceritanya pelajar gila hari ini sedang ingin sok pintar. Beberapa waktu lalu aku mencoba untuk menginstall salah satu sistem operasi y...
Kelas Baru, Hal Baru
Oke, aku balik lagi. Coba aja blog ini manusia, pasti udah aku peluk-cium dah. Udah lamaaaaa bangets (saking lamanya sampe nulis kata banget pake 's') aku tidak bercerita pada blog-ku tercinta ini.Well, sepertinya aku kehilangan kemampuan untuk nulis di blog. Entah kenapa. Padahal sebenernya ada banyak hal yang pengen aku ceritain di blog. Entah kenapa juga jari-jari ini rasanya gak bisa diajak kerja sama.
By the way bus way wa wey wa wey, aku pengen sedikit berbagi cerita tentang kelasku yang baru.
9:04 PM
Oke, aku balik lagi. Coba aja blog ini manusia, pasti udah aku peluk-cium dah. Udah lamaaaaa bangets (saking lamanya sampe nulis kata banget...
[LATE POST] Mari Beramal
Yak, aku ngepost lagi. Well, ternyata udah mulai yang namanya liburan panjang kenaikan kelas. Mungkin sebagian pelajar udah memulai libura...
PROFIL TEMEN: Gung De
Oke, untuk mengisi blog ini, aku bakal tulis deskripsi profil temen-temenku di kelas 10. Gak tau deh, apa mereka bakal beda kelas atau tet...
Sedikit Tentang Masa Lalu
Hmm, semua orang pasti punya yang namanya masa lalu. Entah itu asik atau bikin bete setengah idup. Kecuali untuk yang masih berupa bayi, gak mungkin punya masa lalu.Hmm, semua orang pasti punya yang namanya masa lalu. Entah itu asik atau bikin bete setengah idup. Kecuali untuk yang masih berupa bayi, gak...
Aku dan Pelantikan: Part 2
Haaahh. Entah kenapa belakangan ini aku males banget ngeblog. Mungkin gara-gara banyak tugas. Atau, mungkin juga karena paket internetku diganti. Ya, diganti. Sebelumnya aku pake paket yang unlimited sebulan. Trus, gara-gara keseringan maen game online, eh ortuku malah marah-marah. Internet di rumah pun jadi korban. Paket unlimitednya diganti jadi 15 jam sebulan. Kebayang gak sih? Internet 15 jam sebulan di jaman seperti ini. Rasanya kayak kebelet boker, tapi gak punya lubang pantat. Duh, gak tahan, nyet!Haaahh. Entah kenapa belakangan ini aku males banget ngeblog. Mungkin gara-gara banyak tugas. Atau, mungkin juga karena paket internetku di...
Aku dan Pelantikan: Part 1
Yo, guys. Para pembaca. Dimanapun kalian berada. Dimana pun kalian baca tulisan ini. Entah itu di kamar. Entah di wc (siapa tau). Atau mun...
Diare Bukan Mencret
Cilukba! Lama tak jumpa, blog!Cilukba! Lama tak jumpa, blog! Yaudah, langsung aja. Dua hari yang lalu. Aku terkena penyakit, ehm, diare. Tapi tolong dibedakan antar...
Gempa
Selamat malam, blog-ku tercinta, tersayang, ter..., ya apalah itu.Oke, langsung aja aku mulai ceritaku.
8:51 PM
Selamat malam, blog-ku tercinta, tersayang, ter..., ya apalah itu. Oke, langsung aja aku mulai ceritaku.
HOMO: Sebuah Aib yang Terpendam
Salam cilukba!Salam cilukba! Seperti biasa, malam ini aku pengen cerita sama blog. Semenjak masuk SMA, aku jadi agak sedikit, ehm, homo. Awalnya sih...
Pemsor Yeah!
Selamat malam. Salam sejahtera. Belakangan ini aku jadi agak lebih rajin ngeblog. Duh, makin cinta deh sama blog. Cium dulu neehh. Ya...
Bule dan Tingkahku yang Mirip Homo
Okay, I'm come back!Kali ini aku mau cerita tentang beberapa hal gila. Oke langsung aja.
Kamu tau? Tadi sekolahku kedatengan Bule. Iya, Bule, man! BULE! (maklum, gak pernah liat bule)
8:17 PM
Okay, I'm come back! Kali ini aku mau cerita tentang beberapa hal gila. Oke langsung aja. Kamu tau? Tadi sekolahku kedatengan Bule. ...
Postingan di Sela-Sela Tumpukan Tugas
Hai, Blog!Duh, lama banget blog ini tak terjamah oleh tangan-tangan nistaku ini.
Duh, jadi kangen, peluk ahh..
Duh, jadi bingung.
Duh, jadi kebelet.
~pret
Duh, keluar deh. Bau deh.
6:49 PM
Hai, Blog! Duh, lama banget blog ini tak terjamah oleh tangan-tangan nistaku ini. Duh, jadi kangen, peluk ahh.. Duh, jadi bingung. Duh, ...
Udah Mulai Sibuk
Selamat hari Senin, kawan. Hari yang dimana waktu berjalan lebih lambat dari biasanya. Nah, kenapa aku bilang selamat hari Senin? Padahal...
Pengalaman Absurd
Selamat hari minggu, blog!Hari ini aku mau cerita tentang banyak hal. Oke nggak usah nasi basi lagi.
8:13 PM
Selamat hari minggu, blog! Hari ini aku mau cerita tentang banyak hal. Oke nggak usah nasi basi lagi.
Antara Duren dan Wali Kelas
Salam pelajar! Gimana tadi di sekolah? Ada tugas? Banyak gak? (pertanyaannya kayak udah punya banyak pembaca aja) Kalo iya, berarti sama kayak aku.8:56 PM
Salam pelajar! Gimana tadi di sekolah? Ada tugas? Banyak gak? (pertanyaannya kayak udah punya banyak pembaca aja) Kalo iya, berarti sama kay...
Tentang Saya

Setelah aku perhatikan, ternyata matamu memang sangat indah. Sungguh. Indah sekali. Aku sangat suka menatap matamu. Sehingga aku tak menyadarinya. Mataku kini rusak dan sakit. Semuanya nampak hitam-putih. Cuma kamu yang berwarna ;)
Labels
- Bacot
- Cerpen
- Sehari-hari
- Sekolah
- Teman-teman














