Sabtu, 28 November 2015

Tutorial FUSE

Apa itu FUSE?
Filesystem in Userspace (FUSE) merupakan mekanisme sistem operasi untuk sistem operasi Unix-like yang memungkinkan pengguna tidak ber-hak istimewa menciptakan file system mereka sendiri tanpa mengubah kode kernel. Hal ini dicapai dengan menjalankan kode file system di userspace, sedangkan modul FUSE hanya menyediakan "jembatan" untuk antarmuka kernel yang sebenarnya.

Langkah-langkah instalasi FUSE :
1. Download FUSE dari http://fuse.sourceforge.net/ pada bagian Download stable release
2. Extract file tar.gz dan masuk ke direktori FUSE. (tar –xvzf fuse-2.9.4.tar.gz)
3. Lakukan installasi FUSE dengan cara :
a. Gunakan hak akses super user (sudo su)
b. Ketikkan perintah ./configure
c. Ketikkan perintah make
d. Ketikkan perintah make install
4. FUSE siap digunakan

Langkah-langkah membuat FUSE :
1) Buka terminal pada Linux


2) Buat file fuse.c dengan command gedit fuse.c


Lalu akan muncul


3) Masukkan kode
#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/hamka/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;
}
closedir(dp);
return res;
}

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);
}

Ubah static const char *dirpath = "/home/hamka/Downloads"; sesuai dengan folder yang akan difusekan

4) Compile program dengan command gcc -Wall MusicPlayer.c `pkg-config fuse --cflags --libs` -o fuse


Buat directory baru sebagai tujuan fuse dengan command mkdir /tmp/fuse


Lalu run dengan command ./fuse /tmp/fuse


5) FUSE telah berjalan

Buka directory /tmp/fuse yang ada di Computer


Isinya akan sama dengan folder Downloads



----  SELAMAT MENCOBA  ----









Sabtu, 07 November 2015

Tutorial Thread

Apa itu Thread?
Thread adalah sebuah pengontrol aliran program pelaksanaan program dengan menggunakan kendali tunggal. Operasi yang paling Modern saat ini adalah sistem yang banyak sekali menyediakan berbagai cara, dan memungkinkan suatu proses terkendali dengan baik.

Sebagai contoh kita akan membuat program pemutar musik yang menggunakan thread.

Langkah-langkah membuat Music Player berbasis Thread :
1) Buka terminal pada Linux



2) Buat file MusicPlayer.c dengan command gedit MusicPlayer.c




Lalu akan muncul


3) Masukkan kode
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

pthread_t tid[7];
int n;
char lagu[10];
char ads[100];

void* playandcount(void *arg)
{
unsigned long i=0;
pthread_t id=pthread_self();
int iter;
if(pthread_equal(id,tid[1]))
       {
system("clear");
                printf("--Help\n");
printf("--List\n");
printf("--Play\n");
printf("--Pause\n");
printf("--Continue\n");
printf("--Stop\n");
                printf("--Exit\n");
}
else if(pthread_equal(id,tid[2]))
       {
system("clear");
                chdir ("/home/hamka/Music");
system("ls | grep .mp3");
}
else if(pthread_equal(id,tid[3]))
       {
        system("pkill mpg123");
        system("clear");
        snprintf(ads, sizeof(ads), "mpg123 /home/hamka/Music/%s",lagu);
        system(ads);
}
else if(pthread_equal(id, tid[4]))
       {
system("clear");
sleep(n);
system("pkill -STOP mpg123");
}
else if(pthread_equal(id, tid[5]))
       {
system("clear");
sleep(n);
system("pkill -CONT mpg123");
}
else if(pthread_equal(id,tid[6]))
       {
system("clear");
sleep(n);
system("pkill mpg123");
}
return NULL;
}

int main(void)
{
system("clear");
                int flag=4;
while(flag!=0)
{
char comm[10];
int i=0;
int err=0;
scanf("%s",comm);
if (err!=0) printf("\ncan't create thread : [%s]", strerror(err));
else if (strcmp(comm,"help")==0) err=pthread_create(&(tid[1]), NULL, &playandcount, NULL);
            else if (strcmp(comm,"list")==0) err=pthread_create(&(tid[2]), NULL, &playandcount, NULL);
            else if (strcmp(comm,"play")==0) 
            {
                scanf("%s",lagu);
                err=pthread_create(&(tid[3]), NULL, &playandcount, NULL);
            }
            else if (strcmp(comm,"pause")==0) 
            {
                scanf("%d",&n);
                err=pthread_create(&(tid[4]), NULL, &playandcount, NULL);
            }
            else if (strcmp(comm,"continue")==0)
            {
                scanf("%d",&n);
                err=pthread_create(&(tid[5]), NULL, &playandcount, NULL);
            }
            else if (strcmp(comm,"stop")==0)
            {
                scanf("%d",&n);
                err=pthread_create(&(tid[6]), NULL, &playandcount, NULL);
            }
            else if (strcmp(comm,"exit")==0) flag=0;
            else printf("Wrong Input\n");
}
return 0;
}

Pada menu terdapat command-command berikut :
- Help = Menampilkan command-command yang bisa dilakukan User
- List = Menampilkan list lagu yang terdapat di folder
- Play = Memutar lagu yang diinputkan user
- Pause = Menghentikan lagu setelah "t" detik
- Continue = Melanjutkan lagu yang telah dipause setelah "t" detik
- Stop = Menghentikan lagu setelah "t" detik dan tidak bisa dilanjutkan lagi
- Exit = Keluar dari program

Ket:
- List = Untuk mengganti folder tujuan ganti command "chdir ("/home/hamka/Music");"
- Play = Untuk memutar lagu dengan command play "Judul lagu" (judul lagu harus persis dengan nama filenya
- Pause = Untuk menghentikan lagu dengan command pause "t" (dalam t detik lagu akan berhenti). Hal ini bisa terjadi dengan command : system("pkill -STOP mpg123");
- Continue = Untuk melanjutkan lagu dengan command continue "t" (dalam t detik lagu akan berlanjut). Hal ini bisa terjadi dengan command : system("pkill -CONT mpg123");
- Stop = Untuk menghentikan lagu dan tidak bisa dilanjutkan lagi dengan command stop "t" (dalam t detik lagu akan berhenti). Hal ini bisa terjadi dengan command : system("pkill mpg123");

4) Install mpg123 dengan command apt-get install mpg123


5) Compile program dengan command gcc -pthread MusicPlayer.c -o MusicPlayer


Lalu run dengan command ./MusicPlayer


6) Music Player telah berjalan


Ketik help untuk menampilkan menu



Ketik list untuk menampilkan lagu



Ketik play "Judullagu.mp3" untuk menampilkan menu


Lalu lagu akan berjalan


Ketik pause "t" detik untuk menghentikan lagu


Ketik continue "t" detik untuk melanjutkan lagu


Ketik stop "t" detik untuk menghentikan lagu


Lagu akan berhenti. Ketik exit untuk keluar program



----  SELAMAT MENCOBA  ----