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 :).

Minggu, 18 Oktober 2015

Daemon Process

Pada kesempatan kali ini, saya akan menjelaskan tentang Daemon, Daemon adalah sebuah prosen yang berjalan di background dan tidak berinteraksi langsung dengan user. Ada 6 cara untuk membuat sebuah Daemon process, cara tersebut diantaranya :

1.   Fork parent process dan menghentikan parent process.

Melakukan forking untuk membuat process baru kemudian mematikan parent process.











2.   Mengubah mode file menggunakan UMASK(0).

Agar dapat mengeksekusi file yang dibuat oleh daemon, mode file harus diubah agar bisa dieksekusi atau dibaca. Fungsi UMASK ini mirip dengan chmod.




3.   Membuat Session ID (SID).

Untuk membuat child process, ia harus memiliki session ID yang berbeda dari program lain agar ia dapat beroperasi.






4.   Mengubah direktori kerja.

Direktori kerja dipindahkan ke root agar ia tidak bisa dihapus dan kemudian menghasilkan error.






5.   Menutup file descriptor.

Kemudian agar daemon tidak perlu kendali dari terminal, maka kita harus menutup file descriptornya.






6.   Membuat loop utama.

Ini merupakan inti kerja dari daemon, yang merupakan sebuah program yang bekerja pada background agar terus berjalan sampai dimatikan.







Berikut hasil akhir dari proses diatas.








































Untuk mengetes apakah daemon berjalan, kita akan mencoba untuk membuat logfile dari process yang berjalan.








dari kodingan di atas kita menggunakan ps ux untuk mencari proses yang sedang dijalankan oleh user kemudian menyimpannya ke dalam file B14_log.txt setiap 15 detik sekali.

Untuk menjalankannya kita dapat mengetikkan : gcc (nama file) -o (nama file bebas) pada terminal.




ini berfungsi untuk mengubah file c menjadi daemon.
Kemudian untuk menjalankannya kita perlu mengetikkan : ./(nama file) pada terminal.




Apabila berhasil akan muncul file .txt yang berisi log dari proses yang dijalankan oleh user.
Untuk menghentikan proses daemon kita dapat menggunakan : pkill (nama proses).




--------------------------------------------------------------------------

Sekian sedikit ilmu yang dapat saya bagika pada kesempatan kali ini, semoga ilmunya bermanfaat, terima kasih :).


Minggu, 27 September 2015

Shell script


Saya akan menjelaskan sedikit hal tentang Shell script, shell script adalah sebuah program komputer yang ditujukan untuk sistem operasi berbasis Unix. secara singkat ini mungkin bisa dibilang seperti bahasa pemrograman pada sistem operasi berbasis Unix.

Berikut adalah sedikit perintah pada terminal Linux:
ls : digunakan untuk melihat isi dari suatu direktori.
pwd : digunakan untuk menampilkan nama direktori.
mkdir : digunakan untuk membuat direktori baru.
chmod : digunakan untuk mengatur hak akses suatu file atau direktori.
clear : digunakan untuk membersihkan seluruh layar terminal.
sudo : menjalankan perintah sebagai root.
cd : digunakan untuk berpindah ke direktori lain.
rm : digunakan untuk menghapus file.
mv : untuk memindahkan file, bisa juga untuk merubah nama sebuah file.

Kali ini saya akan sedikit menjelaskan tentang Shell script pada Ubuntu.
Shell script yang akan kita bahas kali ini adalah Bourne Again Shell atau sering disebut dengan bash.
Bash ini adalah shell yang paling umum digunakan oleh pengguna Linux. Shell adalah program yang menjadi menjadi jembatan antara perintah yang dimasukkan user dengan sistem operasi untuk melakukan perintah dari user tersebut. Selain bash shell ada banyak shell lainnya yang biasa digunakan untuk programming, namun penggunaan bash lebih fleksibel karena script yang ditulis lebih kompatibel untuk dibaca dari distro linux yang berbeda.

Pertama, bukalah Terminal pada Ubuntu.


Kemudian, untuk membuat sebuah file bash script, kita bisa memakai beberapa text editor, misalnya nano,

Jangan lupa ketik "#!/bin/bash" (tanpa petik) untuk memulai bash script.


Untuk kali saya akan membuat sebuah program untuk menulis bilangan prima, Salah satu logika yang bisa kita gunakan untuk menulis sebuah bilangan tersebut adalah prima adalah dengan memastikan bilangan tersebut tidak habis dibagi 2 sampai n-1, dengan syarat bilangan tersebut harus lebih besar dari dua. berikut adalah penerapan dari logika di atas.


contoh program saat dijalankan


sekian yang bisa saya bagikan, terima kasih karena telah meluangkan waktu anda membaca blog ini.