Friday, 27 November 2015

HOW TO CREATE YOUR OWN FILE SYSTEM IN LINUX USERSPACE (FUSE)

File system merupakan sebuah metode untuk menyusun akses berkas di dalam media penyimpanan. Setiap sistem operasi memiliki jenis file system yang berbeda beda. Sebagai contoh mac OS x memiliki filesystem bawaan yang diberi nama HFS+, selain itu sistem operasi apple juga mendukung UFS dan FAT sepenuhnya akan tetapi parsial pada NTFS. Lalu untuk OS pada windows 2000 ke atas mendukung baik FAT maupun NTFS. Medium penyimpanan eksternal seperti flashdrive biasanya menggunakan FAT yang didukung sepenuhnya oleh windows dan mac os x.

Nah FUSE atau File System in Userspace merupakan mekanisme sistem operasi yang memungkinkan user umum menciptakan filesystem sendiri tanpa mengubah kode kernel.

contoh membuat file system sendiri pada userspace
---------------------------------------------------------------------------------------------------

MASALAH :

     Aya adalah mahasiswa yang mahir dalam bidang pemrograman. Iya menyimpan semua file C++ nya hanya dalam sebuah folder yang bernama 'FILE' dan terletak di dalam folder Documents. Suatu saat ia ingin memformat laptopnya dan hanya ingin menyimpan file yang ia anggap penting, tetapi Aya lupa file mana saja yang penting maka pertama tama Aya ingin membuat folder temp yang memiliki isi file sama persis seperti isi folder FILE nya, lalu langkah selanjutnya Aya akan membuka satu persatu file yang ia anggap penting dan Aya ingin file yang ia buka membentuk sebuah file backup secara otomatis dengan format nama ..bak. Tidak hanya itu, entah kenapa Aya ingin ketika file backup itu dibuka maka akan muncul pop up message yang berisi pesan bahwa file tersebut hanya dapat dibaca tidak dapat diedit. Karna Aya sedang mengetes kemampuanmu maka buatlah sebuah program yang dapat mensolusikan permintaan Aya.

SOLUSI :

                            >> codingan dalam bahasa c++ pada texteditor os linux

















LANGKAH - LANGKAH :

1. Download FUSE dari http://fuse.sourceforge.net/ pada bagian release.

2. Extract file tar.gz dan masuk ke direktori FUSE (tar -xvf fuse-2.9.4.tar.gz).

3. Lakukan installasi FUSE dengan cara :
    a. Gunakkan hak akses super user (sudo su)
    b. Ketikkan perintah ./configure
    c. Ketikkan perintah make
    d. Ketikkan perintah make install

4. Template FUSE dapat kamu akses di Fuse.sourceforge.net

5. Pilih fungsi mana saja yang kamu butuhkan untuk mendukung algoritma pemrogramanmu

Semoga bermanfaat Terimakasih!

Wednesday, 25 November 2015

HOW TO INFINITE POP UP A CONTENTS OF TXT FILE

Daemon adalah sebuah proses yang bekerja pada background karena proses ini tidak memiliki terminal pengontrol. Dalam sistem operasi Windows biasanya lebih dikenal dengan sebutan service. Daemon adalah sebuah proses yang didesain supaya proses tersebut tidak mendapatkan intervensi dari user. Daemon biasanya bekerja dalam jangka waktu yang sangat lama dan bertugas menerima request dan menjalankan responsnya. Contoh dari daemon ini misalnya adalah Apache Web Server HTTP daemon. Daemon ini bekerja pada background dan menerima request HTTP pada port tertentu (biasanya 80 atau 8080) dan memberikan respon terhadap request tersebut, berdasarkan tipe dari request tersebut.
Adapun hal-hal yang membedakan daemon dengan proses lainnya adalah: daemon tidak memiliki parent proses ID, daemon tidak memiliki pengontrol baik itu STDOUT, STDIN, maupun STDERR, dan daemon berjalan dalam previlege super user.
Berikut ini adalah beberapa cara untuk membuat daemon:
a. Forking dan pembunuhan Proses induk.
Langkah pertama dari pembuatan daemon adalah dengan menspawn proses menjadi induk dan anak dengan melakukan forking, kemudian membunuh proses induk. Proses induk yang mati akan menyebabakan sistem operasi mengira bahwa proses telah selesai sehingga akan kembali ke terminal user. Dari langkah tersebut kita akan mendaptkan sebuah proses anak yang melanjutkan program setelah induknya mati, sehingga kita mendapatkan sebuah proses yang hampir bekerja pada backround.
Contoh :







b. Membuat proses bekerja secara independen
Daemon harus bekerja secara independen daripada proses-proses lain, termasuk juga proses yang menjalankannya. Langkah bisa dilakukan dengan memanggil fungsi setsid(), sehingga proses akan mendapatkan sebuah session ID yang baru.
Contoh :



c. Menutup standar I/O deskriptor yang diwarisi
Untuk mencegah terjadinya intervensi dari user serta untuk pengamanan, maka standar I/O descriptor dan descriptor yang diwarisi dari proses induk harus ditutup. Ada 3 jenis standar I/O descriptor : STDIN (standar input), STDOUT (standar output), STDERR (standar error).
Contoh:
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
d. Melakukan masking pada File Creation
Sebagian besar daemon bekerja dalam previlege super user. Daemon biasanya memproteksi setiap file yang dibuat, dengan alasan keamanan. Fungsi umask() akan mencegah file-file previleges yang tidak aman dalam setiap pembuatan file.
Contoh :









e. Running Directory
Directory kerja daemon haruslah sebuah directory yang selalu hidup. Bisa saja pada saat starting working directorynya pada saat itu berada pada user home. Karena daemon bekerja sampai sistem reboot, maka file sistem user directorynya takkan pernah bisa di unmount.
Contoh :






contoh pop-up dari isi sebuah file txt :
----------------------------------------------------------------------------------
MASALAH :


1         Aya adalah seorang programer handal dan berani. Suatu hari, dia ingin membuat sebuah virus bernama “Virus Quotes 2 Menit”, dimana virus tersebut terdiri dari file aplikasi virus dan daftar quotes dalam sebuah file bernama file.txt. Jika virus ini ada dalam komputer anda, maka akan muncul pop-up dari semua isi file.txt yang terpisah dengan tanda delimiter koma (,) satu persatu setiap 2 menit sekali. Sebagai teman baik Aya bantulah ia membuat program tersebut!

SOLUSI :
                              >> codingan dalam bahasa c pada texteditor os linux




                                 >>isi file.txt



                                 >>saat dijalankan pada terminal




Langkah - langkah :


1. Pertama tama siapkan variabel pointer ber tipe data FILE karna variabel ini akan digunakan untuk menunjuk sebuah file txt (FILE *fp). 


2. Selain itu kita juga membutuhkan 2 variabel array of char alias string untuk menampung isi file (char message[1500], content[1500])


3. Siapkan juga sebuah variabel pointer untuk menunjuk hasil fungsi strtok (char *pch).


4. Karna kita akan mempop up kata terus menerus tanpa batasan tertentu dan akan berhenti hanya jika kita memanggil fungsi pkill pada program maka kita gunakan while(1). Angka satu didalam kurung while menyatakan bahwa pada semua kondisi adalah benar sehingga program akan selalu di eksekusi.


5. Untuk mendapatkan sebuah isi file maka langkah awal yang harus kita lakukan adalah dengan membuka file menggunakan fungsi fopen dan memasukkannya kedalam variabel pointer yang bertipe data FILE (fp=fopen("file.txt","r")). Dapat diartikan kita membuka file yang bernama file.txt dan code "r" berarti read only yaitu user hanya bisa membaca isi text dan tidak diizinkan untuk mengedit isi file.


6. Setelah file terbuka, kita akan mengambil isi file menggunakan fungsi fgets (fgets(content,1500,fp)). Dapat diartikan isi file yang ditunjuk oleh variabel fp sekarang menjadi isi variabel content dengan batasan 1500 char.


7. Agar aman, variabel content kita biarkan tetap memiliki isi original file lalu isi variabel content kita copy kedalam variabel array of char yang lain menggunakan strcpy (strcpy(message,content)). Variabel lain ini yang akan kita mainkan.


8. Strtok adalah fungsi untuk memotong sebuah string berdasarkan indikator tertentu yang ditentukan oleh user (pch=strtok(message,",")). Dapat diartikan kita akan memotong isi dari variabel message berdasarkan koma, lalu variabel pointer pch akan menunjuk kata sebelum koma.


9. Setelah mendapatkan sebuah kata maka langkah selanjutnya kita akan menampilkan kata tersebut menggunakan pop-up dengan fungsi zenity (char temp[ ] = "zenity --warning --text=' "). Jangan lupa mendeklarasikan sebuah variabel string untuk menampung perintah zenity.


10. Program belum dapat dijalankan karna pada fungsi zenity belum terbaca string yang akan di pop-up maka kita perlu menyatukan isi variabel temp dengan variabel pch menggunakan strcat (strcat(temp,pch)).


11. Program tetap menganggap tidak terbaca adanya string pada zenity karena tidak adanya tanda petik penutup. Seperti yang pernah kita pelajari sebelumnya bahwa untuk string yang ingin dibaca harus diapit oleh tanda petik. Maka kita perlu menggabungkan temp yang sudah digabung pch dengan tanda petik mengggunakan strcat (strcat(temp," ' "))


12. Langkah selanjutnya untuk menjalankan perintah di temp maka kita menggunakan fungsi system (system(temp)).


13. Setelah kata pertama di tampilkan menggunakan pop-up maka kita kembali mengosongkan nilai pch / pch tidak menunjuk alamat manapun.


14. Lalu karena program diminta pause selama 2 menit (120 detik) maka kita gunakan fungsi sleep (sleep(120)) .


15. Jika program menganggap sudah tidak ada isi file alias nilai pch adalah kosong maka file yang tadi dibuka ditutup kembali menggunakan fclose (fclose(fp)).


Semoga bermanfaat terima kasih!

Saturday, 7 November 2015

CONNECTING 2 PROGRAM USING SHARED MEMORY

Shared memory adalah memori yang dapat diakses secara bersamaan oleh beberapa program dengan maksud untuk menyediakan komunikasi di antara mereka atau menghindari salinan yang berlebihan. Tergantung pada konteks, program dapat berjalan pada satu prosesor atau beberapa prosesor yang terpisah. Merupakan salah satu cara komunikasi antar proses dengan cara mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antar proses. Alamat dan besar alokasi memori yang digunakan biasanya ditentukan oleh pembuat program. Pada metode ini, sistem akan mengatur proses mana yang akan memakai memori pada waktu tertentu sehingga pekerjaan dapat dilakukan secara efektif.

Penjelasan fungsi :

1. shmget();
          System call untuk membuat suatu segmen shared memory

#include
#include 
int shmget(key_t key, size_t size, int shmflg); 

          shmflg bisa diisi dengan : IPC_CREATE, IPC_EXCL, permission

2. shmat();
           System call untuk mendaftarkan segment shared memory ke dalam data space dari suatu proses

#include
#include 
void *shmat(int shmid, const void *shmaddr, int shmflg); 

Parameter :
shmid ID dari shared memory
shmaddr Lokasi shared memory di main memory
jika NULL akan dicarikan lokasi pada memory yang ingin ditempati 

Return :
Pointer ke lokasi shared memory

3. shmdt();
            System call untuk melepaskan shared memory segment dari data space dari proses.

#include
#include 
int shmdt(const void *shmaddr); 

Parameter :
shmaddr pointer ke lokasi shared memory 

Return :
0 sukses
(void *) -1 error

4. shmctl();
           System call untuk mengetahui atau merubah informasi yang berkaitan dgn suatu shared memory

#include
#include 
int shmctl(int shmid, int cmd, struct shmid_ds *buf);

Argument cmd bisa berisi : 

IPC_STAT : mengambil informasi ttg shared memory segment
IPC_SET : mengubah informasi ttg shared memory segment
IPC_RMID : menandai suatu segment untuk dibuang ketika semua process yang menggunakannya sudah melepasnya
SHM_LOCK : Lock suatu segment, membuatnya tidak bisa di-swap
SHM_UNLOCK : Unlock suatu segment

Program Tambahan untuk IPC
     Ada 2 program tambahan yang berguna untuk melihat apa yang terjadi pada IPC yang dibuat :
1  ipcs Menyediakan informasi yang berkaitan dengan IPC yang sedang digunakan (message queue, shared memory, semaphore)
2  ipcrm Menghapus IPC tertentu (message queue, shared memory, semaphore)


Contoh codingan meghubungkan 2 buah program :


-----------------------------------------------------------------------------------------------------------------
Aya adalah seorang programmer handal sekaligus pemilik toko yang menjual 6 buah peralatan komputer yaitu RAM, Harddisk, Motherprocessor, VGA, PSU, Processor. Ia ingin membuat sebuah program untuk tokonya. Program yang ingin ia buat harus terhubung antara client dan server. Client dapat membeli dan melihat jumlah stok yang tersisa sedangkan server dapat menambah stok barang dan melihat sisa akhir barang. Awalnya Aya membuat program menggunakan teori PIPE dan ternyata kedua program tidak terhubung. Karna 3 asisten praktikumnya juga menyerah dengan program Aya maka Aya mendemokan program erorr yang pada akhirnya diminta revisi oleh asisten demo menggunakan SHARED MEMORY. Berbeda dengan PIPE yang Aya kerjakan berhari hari, SHARED MEMORY hanya dikerjakan dalam waktu beberapa jam. Berikut codingan yang ia kerjakan :


CLIENT PROGRAM :






SERVER PROGRAM :



Langkah - langkah :
1. Membuat segment di memory dengan shmget()
2. Mendaftarkan (attach) segment ke data space dari proses dengan shmat()
3. Tulis/baca dari memori
4. Detach segment dari data space dari proses dengan shmdt()

Sebenarnya sangat mudah menggunakan shared memory karena hanya menggunakan sedikit template yang sudah saya jelaskan diatas. Untuk run program ini pada terminal pun standard seperti biasanya tidak harus special seperti menggunakan thread. Titik pentingnya adalah bagaimana kamu memodifikasi template pada int main agar memenuhi output yang kamu inginkan.

Semoga bermanfaat terimakasih!