Males Koding

Icon

Blog yang isinya ternyata banyak kodingannya

Socket Programming di C

Di ambil dari sini. Sedikit snippet tentang socket programming di C. Pemrograman ini menggunakan fungsi-fungsi socket yang sudah disediakan oleh Linux. Untuk beberapa OS lain seperti BSD dan MacOS kalau gak salah penangannya agak sedikit berbeda.

Read the rest of this entry »

Filed under: C, Dedicated, Lecture, Linux, Medium, Network Programming, Snippets, tutorial , , , ,

Simulasi Local Network di VirtualBox

Kadang-kadang untuk melakukan pengembangan aplikasi yang berjalan pada jaringan, agak menyulitkan ketika kita tidak memiliki jaringan yang sesungguhnya. Kalau untuk pengembangan aplikasi web sebenarnya tidak terlalu penting memerlukan lebih dari 1 IP. Untuk mensimulasikan session pun cukup dengan melakukan instalasi 2 atau lebih browser. Sedangkan kalau ingin melakukan pengambangan aplikasi menggunakan socket biasanya harus mempunyai lebih dari 2 IP (atau 2 mesin lah).

Tapi dengan menggunakan VirtualBox, kita dapat membuat simulasi sebuah jaringan.

Kali ini saya sedang eksplorasi bagaimana melakukannya. Di VirtualBox ini saya mempunyai 2 buah OS yakni Ubuntu dan XP. Saya ingin mencoba agar Ubuntu dan XP ini dapat berada dalam 1 jaringan yang sama.

Read the rest of this entry »

Filed under: Easy, Miscelleneaous, Network Programming, Snippets, Ubuntu, tutorial , , , , , ,

Jaunty Release Party Bandung

Titipan pengumuman

jrp

Filed under: Linux, Miscelleneaous, Ubuntu , ,

Repository Lokal Ubuntu dengan ISO DVD

Hari ini lagi butuh paket software buat server Xubuntu gw yang di Divusi, tapi mau konek ke situs luar rada lama. Untungnya gw masih punya ISO DVD Repository Ubuntu yang versi Intrepid Ibex. Caranya gampang mau setting repository.

Pertama-tama kopi semua ISOnya ke sebuah folder, katakanlah “/tmp/iso”.

$sudo cp /path/ke/folder/ubuntu-8.10-repository-i386-1_contrib.iso /tmp/iso
$sudo cp /path/ke/folder/ubuntu-8.10-repository-i386-2_contrib.iso /tmp/iso
$sudo cp /path/ke/folder/ubuntu-8.10-repository-i386-3_contrib.iso /tmp/iso
$sudo cp /path/ke/folder/ubuntu-8.10-repository-i386-4_contrib.iso /tmp/iso
$sudo cp /path/ke/folder/ubuntu-8.10-repository-i386-5_contrib.iso /tmp/iso
$sudo cp /path/ke/folder/ubuntu-8.10-repository-i386-6_contrib.iso /tmp/iso

Kemudian buat sebuah folder tempat repositorynya, katakanlah di “/tmp/repo”

$sudo mkdir /tmp/repo/intrepid-1
$sudo mkdir /tmp/repo/intrepid-2
$sudo mkdir /tmp/repo/intrepid-3
$sudo mkdir /tmp/repo/intrepid-4
$sudo mkdir /tmp/repo/intrepid-5
$sudo mkdir /tmp/repo/intrepid-6

Lalu kita mount semua ISOnya ke folder-folder tersebut

$sudo mount -o loop -t iso9660 /tmp/iso/ubuntu-8.10-repository-i386-1_contrib.iso /tmp/repo/intrepid-1
$sudo mount -o loop -t iso9660 /tmp/iso/ubuntu-8.10-repository-i386-2_contrib.iso /tmp/repo/intrepid-2
$sudo mount -o loop -t iso9660 /tmp/iso/ubuntu-8.10-repository-i386-3_contrib.iso /tmp/repo/intrepid-3
$sudo mount -o loop -t iso9660 /tmp/iso/ubuntu-8.10-repository-i386-4_contrib.iso /tmp/repo/intrepid-4
$sudo mount -o loop -t iso9660 /tmp/iso/ubuntu-8.10-repository-i386-5_contrib.iso /tmp/repo/intrepid-5
$sudo mount -o loop -t iso9660 /tmp/iso/ubuntu-8.10-repository-i386-6_contrib.iso /tmp/repo/intrepid-6

Setelah itu kita edit file “/etc/apt/sources.list/”. Ditambahkan di paling akhir

deb file:///tmp/repo/intrepid-1 intrepid main restricted
deb file:///tmp/repo/intrepid-2 intrepid main multiverse restricted
deb file:///tmp/repo/intrepid-3 intrepid universe
deb file:///tmp/repo/intrepid-4 intrepid universe
deb file:///tmp/repo/intrepid-5 intrepid universe
deb file:///tmp/repo/intrepid-6 intrepid universe

Terakhir kita eksekusi

$sudo apt-get update

Jadi deh :)

Filed under: Linux, Snippets , , , ,

Komunikasi Modul Kernel – User Space Program melalui procfs

Melanjutkan postingan tentang modul kernel yang dulu.

Biasanya untuk melakukan pemindahan data antara dua buah program cukup dengan menggunakan sebuah file yang dibaca bersama (selain dengan menggunakan IPC). Hal ini cukup sulit untuk dilaksanakan pada modul kernel karena pada dasarnya modul tidak disediakan fungsi file I/O layaknya system call open(). Menulis file pada kernel space menjadi cukup sulit.

Salah satu cara yang mudah melakukan komunikasi antara sebuah kernel module dan user space program adalah dengan menggunakan procfs. Procfs adalah sebuah filesystem yang menyediakan informasi mengenai process-process dalam kernel. Procfs ini dapat dibuka di folder /proc.

$cd /proc
$ls -l | less
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 1
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 119
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 120
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 121
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 1369
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 1372
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 1385
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 1392
dr-xr-xr-x  6 root       root               0 2009-01-07 15:07 2

Di sana tersimpan data-data mengenai process yang sedang dijalankan. Folder-folder yang memiliki nama berupa angka merepresentasikan process dengan process ID (PID) yang  sama dengan nama folder tersebut. Di dalam folder tersebut tersimpan data-data mengenai process yang bersangkutan.

Read the rest of this entry »

Filed under: C, Linux, Snippets, System Programming , , , , , , ,

Timer pada Modul Kernel Linux

Salah satu hal yang bisa dilakukan pada modul kernel adalah membuat sebuah sistem yang sifatnya real time. Salah satu contohnya adalah pada tugas terakhir kuliah IF4097 Jaringan Komputer Lanjut. Pada tugas ini kita diminta untuk membuat sebuah modul kernel yang secara periodik mengecek availability sebuah node pada jaringan.

Timer ini dapat diimplementasikan dengan menggunakan struktur data timer_list. Struktur data ini dapat di lihat pada include/linux/timer.h

struct timer_list
{
		struct timer_list *next;
		struct timer_list *prev;
		unsigned long expires;
		unsigned long data;
		void (*function)(unsigned long);
};

Read the rest of this entry »

Filed under: C, Linux, Programming, Snippets, System Programming , , , , , , , , ,

Modul Kernel Sederhana

Modul kernel adalah sebuah file obyek yang berisi fungsi-fungsi yang dapat digunakan oleh kernel sistem operasi. Tujuan dibuat sebuah modul kernel adalah untuk menyediakan fungsi-fungsi yang tidak disediakan secara default oleh kernel. Modul ini biasanya digunakan sebagai device driver.

Contoh sebuah modul kernel sederhana

/* file contoh.c */
#include <linux/module.h>
static void __init hello_init(void)
{
	printk(KERN_INFO "Hello World!");
}

static void __exit hello_exit(void)
{
	printk(KERN_INFO "Hello World!");
}

module_init(hello_init);
module_exit(hello_exit);

Untuk menjalankan modul ini pertama-tama kode harus dikompilasi. Kompilasi dapat dilakukan dengan menggunakan Makefile seperti di bawah ini

obj-m += contoh.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Kompilasi dapat dilakukan dengan menggunakan perintah Make.

Selanjutnya akan terdapat beberapa file termasuk contoh.ko.

Untuk melakukan instalasi cukup jalankan perintah pada shell

#insmod contoh.ko

Untuk membuang modul dari kernel jalankan perintah

#rmmod

Keluaran dapat dilihat dengan menggunakan perintah

#dmesg

Bisa dilihat pada kode di atas, fungsi inisialisasi, yakni fungsi yang dijalankan pertama kali diset dengan menggunakan fungsi module_init, sedangkan fungsi yang dijalankan saat modul dibuang diset dengan menggunakan fungsi module_exit.

Pada dasarnya modul kernel berbeda dengan program biasa. Karena berjalan pada kernel space, modul hanya dapat menggunakan fungsi-fungsi yang disediakan oleh kernel. Modul kernel tidak dapat menggunakan fungsi-fungsi yang disediakan library. Oleh karena itu header file seperti stdio.h, stdlib.h, tidak dapat dipakai dalam modul. Dapat dilihat di atas, untuk melakukan pencetakan ke terminal tidak digunakan fungsi printf melainkan fungsi printk yang pada dasarnya memiliki fungsi dan fitur yang sama.

File yang berisi modul sederhana dan makefilenya dapat diunduh di sini.
NB : Direname dulu ke file zip.

Filed under: C, Linux, Snippets, System Programming , , , , , ,

Pipe beruntun

Di dalam UNIX Command, sering dipakai tanda “|”. Tanda “|” adalah pipe, maksudnya stdout dari sebuah program dapat menjadi stdin dari program yang lain. Di dalam C, fitur ini dapat diimplementasikan dengan fungsi pipe(). Di contoh yang ada pada spesifikasi tersebut hanya menangani antara 2 proses.

#include <stdlib .h>
#include <unistd .h>

int main(){
	int fildes[2];
	const int BSIZE = 100;
	char buf[BSIZE];
	ssize_t nbytes;
	int status;
	status = pipe(fildes);
	switch (fork()) {
	case -1: /* Handle error */
	    break;

	case 0:  /* Child - reads from pipe */
	    close(fildes[1]);                       /* Write end is unused */
	    nbytes = read(fildes[0], buf, BSIZE);   /* Get data from pipe */
	    /* At this point, a further read would see end of file ... */
	    close(fildes[0]);                       /* Finished with pipe */
	    exit(EXIT_SUCCESS);

	default:  /* Parent - writes to pipe */
	    close(fildes[0]);                       /* Read end is unused */
	    write(fildes[1], "Hello world\n", 12);  /* Write data on pipe */
	    close(fildes[1]);                       /* Child will see EOF */
	    exit(EXIT_SUCCESS);
	}
}

Fungsi pipe ini akan menyambungkan input dari sebuah filedescriptor menjadi output pada filedescriptor lain. Input/output ini dibaca dengan menggunakan fungsi read() dan write().

Read the rest of this entry »

Filed under: C, Linux, Snippets, System Programming , , , , , , , ,

iniParser : memparsing file dengan ekstensi *.ini

INI file adalah sebuah format file yang digunakan untuk menampung konfigurasi. Ekstensi INI berasal dari kata “initialization”. Biasanya memang digunakan untuk menampung konfigurasi inisialisasi dari sebuah aplikasi.

Format datanya adalah seperti ini

[section]
name = value ; comment

Untuk mengolah file seperti ini pada lingkungan pemrograman C, sudah terdapat banyak library yang dapat digunakan untuk melakukan parsing, mengedit, serta mengambil dan mengeset nilai pada file tersebut. Salah satu dari library tersebut adalah iniParser. Library sangat baik untuk digunakan karena cukup lengkap dan simpel.

Read the rest of this entry »

Filed under: C, Linux, Snippets , , , , , ,

Menggunakan MySQL C API pada Netbeans

Belakangan gw sering banget menggunakan Netbeans sebagai IDE utama untuk ngoding aplikasi dengan bahasa C. Penggunaan Netbeans C/C++ Development adalah salah satu fitur yang sangat menyenangkan bagi para programmer C/C++. Salah satu fitur yang menyenangkannya adalah kemudahan untuk mengkonfigurasi kode seperti penambahan library dan include folder.

Sebagai contoh kemudahannya adalah saat gw ingin menggunakan MySQL C API untuk aplikasi yang sedang gw kembangkan. Tahap-tahapnya adalah

  1. Instalasi libmysqlclient.
    Caranya sangat mudah. Untuk Ubuntu tinggal ketik pada terminal

    #sudo apt-get install libmysqlclient15-dev
  2. Include header mysql.
    Tinggal mengetikkan
    #include <mysql/mysql.h>
    

    Dapat dilihat fitur intellisense pada Netbeans langsung bekerja.

  3. Tambahkan library libmysql pada linker.
    Tanpa melakukan ini fungsi-fungsi yang akan digunakan tidak dapat dilink. Caranya adalah klik kanan pada project yang sedang dikerjakan, pilih Properties. Kemudian pilih menu Linker > Libraries. Pilih Add Library. Kemudian masukkan /usr/lib/libmysqlclient.a
  4. Setelah itu penulisan kode dapat dengan mudah dilakukan karena ada fitur intellisense.

    Dan pembangunnya juga dapat tinggal dilakukan dengan fungsi Build pada Netbeans.

Gampang jadinya ^_^

Referensi lebih lengkap mengenai fungsi-fungsi yang disediakan, ada pada dokumentasi resmi MySQL C API di sini

Filed under: C, Linux , , , , , ,

About Me

avatar
Just a man who only knows how to code but really dislike doing it

Contact Me





Top Rated

Twitter Terbaru