Minggu, 26 Oktober 2014

Inter Process Communication Menggunakan Named Pipes(FIFO) pada Linux

Named Pipe atau biasa disebut special file FIFO(First In First Out) karena data akan di read berurutan dari data yang pertama di write ke pipe. Perbedaan named pipe dengan unnamed pipe adalah :

  • Named pipe eksis sebagai bagian dari filesystem.
  • Named pipe dapat diakses oleh berbagai proses untuk sharing data(reading dan writing).
  • Ketika semua I/O telah selesai dilakukan ketika proses komunikasi, named pipe tetap berada di filesystem sehingga dapat digunakan di lain waktu.
  • Bersifat bidirectional, file FIFO yang sama dapat di read from dan write into.


Ketika proses melakukan pertukaran data via named pipes, kernel melewatkan semua data secara internal tanpa melakukan write ke filesystem. Maka, special file FIFO tidak mempunyai isi di filesystem, file tersebut hanya digunakan sebagai reference point sehingga proses dapat meng-akses pipe menggunakan nama pipe tersebut di filesystem.

Berikut merupakan contoh implementasi FIFO yaitu komunikasi antar server dan client :

server.cpp




















































































































client.cpp































  • Named pipe atau FIFO dibuat menggunakan fungsi mkfifo() yang mempunyai 2 argumen, argumen ke-1 adalah nama FIFO yang akan dibuat dan argumen ke-2 adalah hak akses untuk file tersebut. Jika program ingin dijalankan lebih dari sekali, sebaiknya pembuatan named pipe/FIFO dilakukan di program lain yang khusus untuk membuat file FIFO tersebut. Ada baiknya jika return value sebuah fungsi seperti yang berhubungan dengan create dan open file diletakkan di sebuah variabel untuk mengecek apakah fungsi tersebut sukses dijalankan atau tidak. 

  • Setelah file FIFO dibuat(pada contoh di atas menggunakan nama server dan client), file tersebut dapat dibuka menggunakan system call open(). Argumen ke-2 pada system call open() menandakan apakah file tersebut hanya dapat di read(O_RDONLY) atau hanya dapat di write(O_WRONLY) atau bisa kedua-duanya(O_RDWR). 

 

  • Sebuah file FIFO harus dibuka kedua sisinya(reading dan writing) sebelum data dapat masuk. Contohnya jika server di execute, ketika file server di open untuk di read, terminal akan menunggu(wait state) hingga file server di open untuk di write suatu data oleh client.



  • Alur dari contoh program di atas adalah setelah client selesai menuliskan(write) data melalui file server, server akan membaca(read) data yang disampaikan melalui file server dan menampilkan data tersebut ke layar. Kemudian server akan membuka file client untuk menuliskan kembali data yang didapatkan tadi, dan client akan membaca data yang disampaikan melalui file client dan menempatkannya di string baru untuk ditampilkan ke layar. 

  • Hasilnya kedua proses tersebut dapat berkomunikasi melalui file FIFOs/named pipes.




  • Intinya agar dapat melakukan IPC menggunakan named pipes pada Linux dilakukan langkah-langkah seperti berikut :
  1. Buat named pipes/file FIFOs yang akan digunakan untuk berkomunikasi antar proses menggunakan fungsi mkfifo()
  2. File FIFO yang telah dibuat dibuka menggunakan system call open()
  3. File FIFO tersebut harus dibuka kedua sisinya(read dan write)(baik oleh dirinya sendiri atau melalui proses lain) agar dapat digunakan untuk berkomunikasi.
  4. Gunakan system call write() jika ingin menulis/mengirim data ke proses lain melalui file FIFO(bisa ke dirinya sendiri).
  5. Gunakan system call read() jika ingin membaca/menerima data dari proses lain melalui file FIFO(bisa dari dirinya sendiri).






Sekian postingan dari saya, semoga bermanfaat :)

Tidak ada komentar:

Posting Komentar