Minggu, 29 November 2015

FUSE

FUSE (Filesystem in Userspace) adalah bagian khusus pada kernel Linux yang memungkinkan user biasa untuk membuat sistem file mereka sendiri tanpa mengubah kernel maupun mempunyai akses root. Sistem file yang digunakan dalam FUSE ini merupakan sistem file virtual. Kode dari FUSE ini berada di kernel, tetapi sistem filenya berada di ruang lingkup pengguna atau user (userspace).

Langkah instalasi :
1. Download di http://fuse.sourceforge.net/. pada bagian stable release.
2. Extract file dan masuk ke direktori FUSE.
3. Gunakan hak akses super user sudo su.
4. ketik perintah ./configure.
5. ketik perintah make.
6. ketik perintah make install.
FUSE sudah siap untuk digunakan.

Untuk mencoba apakah FUSE dapat berjalan dengan baik, maka kita perlu mencobanya, berikut adalah contohnya.

--------------------------------------------------------------------------
#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/auloid/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);
--------------------------------------------------------------------------

masukkan kode di atas pada file .c dan jalankan dengan mengetikkan

gcc -Wall [kode_c] `pkg-config fuse --cflags --libs` -o [program_fuse]
kemudian ketik kode di bawah untuk menjalankannya
./[program_fuse] [direktori_mount_point]

untuk menghentikan FUSE kita dapat mengetikkan
sudo umount [direktori_mount_point]

Dari implementasi program di atas dapat sobat lihat bahwa tidak semuanya fungsi yang saya gunakan. Banyak fungsi-fungsi lainnya dalam FUSE yang dapat dimodifikasi sesuai dengan yang sobat-sobat inginkan. Info lebih lengkap terkait FUSE dapat dikunjungi di http://fuse.sourceforge.net atau bisa kalian cari sumber lain di internet. Sekian yang dapat saya sampaikan pada kesempatan kali ini, terima kasih atas waktu anda.

Sabtu, 07 November 2015

Membuat Music Player pada terminal LINUX

Pada kesempatan kali ini saya akan membagi sebuah music player sederhana pada terminal linux, sebelumnya kita harus menginstall mpg123 dulu dengan mengetik pada terminal

sudo apt-get install mpg123

Agar music player kita memiliki fitur berupa play, pause, resume, dan stop, music player itu harus bisa mengerjakan beberapa perintah dalam suatu waktu yang sama. oleh karena itu kita membutuhkan Thread.

Thread adalah bagian kecil dari suatu proses yang bisa di jadwalkan oleh sistem operasi. ada beberapa macam thread, yaitu :

  1. Single Threading : Adalah sebuah proses yang hanya memiliki satu thread yang berjalan. Biasanya fungsi thread ini digunakan sebagai pengendali jalannya proses.
  2. Multi Threading : Adalah proses yang memiliki lebih dari satu thread yang berjalan didalamnya,sehingga dalam hal ini proses dapat menjalankan lebih dari satu tugas dalam satu waktu.
berikut contoh kode untuk music player dalam bahasa c
-------------------------------------------------------------------------


#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>


pthread_t tid[10]; //membuat thread sejumlah array

int n; //menentukan timer

void* playandcount(void *arg){
pthread_t id=pthread_self(); // memanggil thread

if(pthread_equal(id,tid[1])){
system("clear"); //membersihkan layar
printf("\nHelp List\n");
printf("Press the below number to execute command\n");
printf("1 - (Show Help command)\n");
printf("2 - (Show playlist)\n");
printf("3 - (Play)\n");
printf("4 - (Pause after x sec)\n");
printf("5 - (Continue after x sec)\n");
printf("6 - (Stop after x sec)\n");
}
else if(pthread_equal(id,tid[2])){
system("clear");
system("ls | grep .mp3"); //menampilkan file mp3
}
else if(pthread_equal(id,tid[3])){
system("clear");
system("mpg123 lagu.mp3"); //memutar mp3
}
else if(pthread_equal(id, tid[4])){
system("clear");
sleep(n);
system("pkill -STOP mpg123"); //pause player
}
else if(pthread_equal(id, tid[5])){
system("clear");
sleep(n);
system("pkill -CONT mpg123"); //continue player
}
else if(pthread_equal(id,tid[6])){
system("clear");
sleep(n);
system("pkill mpg123"); //exit player
}
return NULL;
}

int main(void){
system("clear");
while(1){
int comm;
int err=0;
scanf("%d", &comm); //input command
if(comm==4 || comm==5 || comm==6)
scanf("%d", &n); //input timer
printf("\n\n");
if (err!=0)
printf("\ncan't create thread : [%s]", strerror(err));
else{
err=pthread_create(&(tid[comm]), NULL, &playandcount, NULL);
}
}
return 0;
}
-------------------------------------------------------------------------

untuk meng-compile program tersebut pada terminal

gcc player.c -lpthread -o play.o

selanjutnya untuk mengeksekusi program tersebut pada terminal

./play.o

Sekian yang dapat saya bagi pada kesempatan kali ini, semoga bermanfaat untuk anda, terima kasih karena telah meluangkan waktu anda untuk membaca :).