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 , , , ,

Simple SCP

Diambil dari artikel lama di blog

Tugas IF3292 Pemrograman Internet disuruh bikin yang beginian
SCP
Dari semua tugas sebelumnya

  1. HTML Editor with DHTML
  2. Simple CMS with PHP
  3. Web Chess with AJAX

yang paling menarik yet paling susah yang ini……
disuruh bikin protokol sendiri….

tapi sebenarnya kalau dipikir-pikir konsepnya gak terlalu susah…. teknologinya aja yang ribet….

jadi intinya disuruh ngebikin program SCP-like dengan menggunakan socket programming di Linux…..
fungsinya cuman 2 : buat ngopi dan mindahin folder/file dari satu host ke host yang lain…
Read the rest of this entry »

Filed under: C, Network Programming, Programming , , , , , , ,

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 , , , , , , , ,

TOKI : Pengenalan C/C++ – GCC, MinGW, DevC++

Di dalam pelatihan nasional TOKI I, peserta akan diperkenalkan kepada bahasa C/C++. Penggunaan bahasa ini adalah lanjutan dari penggunaan bahasa Pascal yang telah peserta gunakan pada Olimpiade Sains Nasional. Sangat banyak kelebihan penggunaan C/C++ daripada Pascal terutama dalam segi kecepatan dan fitur-fitur bahasa.

Pertama-tama peserta akan diperkenalkan kepada beberapa aplikasi terkait dengan pemrograman bahasa C/C++

GCC

GCC atau GNU Compiler Collection adalah kumpulan compiler yang dibuat dalam proyek GNU. Awalnya GCC hanya ditujukan sebagai compiler untuk bahasa C (GNU C Compiler), tapi lama kelamaan berkembang menjadi banyak compiler untuk berbagai bahasa pemrograman seperti untuk C itu sendiri (gcc) dan juga untuk C++ (g++) Kumpulan compiler ini merupakan compiler standard yang terdapat pada  sistem  GNU dan merupakan paket minimal pada hampir semua distribusi Linux meski dapat ditemukan juga pada sistem-sistem operasi berbasis UNIX. Compiler gcc dan g++ merupakan compiler yang ditetapkan untuk digunakan oleh peserta pada IOI 2007 di Kroasia yang lalu.

link : http://gcc.gnu.org

MinGW

MinGW atau Minimalist GNU for Windows adalah paket program pemrograman berbasis GNU yang dapat dijalankan di dalam sistem operasi Windows. Di dalam paket ini sudah meliputi program GCC sendiri. Di dalam persiapan pelatnas ini, peserta diminta untuk membiasakan diri menggunakan lingkungan pemrograman dan kompilasi berbasis command line.

link : http://www.mingw.org

DevC++

DevC++ atau DevCpp adalah sebuah lingkungan pengembangan terintegrasi yang digunakan untuk mengembangkan aplikasi dalam bahasa C/C++. DevC++ ini berjalan di atas sistem operasi Windows dan menggunakan MinGW untuk compiler C/C++nya. Meski demikian DevCpp dikembangkan dalam bahasa Delphi. Aplikasi ini adalah pilihan paling baik untuk mengembangkan aplikasi dalam bahasa C/C++ di atas sistem operasi Windows dalam konteks olimpiade komputer.

link : http://www.bloodshed.net/devcpp.html

Filed under: Tim Olimpiade Komputer Indonesia , , , , , , ,

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 , , , , , ,

ncurses – hello world

Hari ini iseng-iseng eksplorasi ncurses. Ncurses adalah sebuah library untuk manipulasi tampilan text user interface. Dengan library ini kita dapat mengatur tulisan pada terminal. Sebagai contoh, untuk menghapus tulisan pada terminal biasanya diperlukan eksekusi

system("clear");

yakni mengeksekusi command “clear” di terminal melalui program. Dengan library ini juga kita dapat meletakkan tulisan di mana pun pada terminal.

Read the rest of this entry »

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

About Me

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

Contact Me





Top Rated

Twitter Terbaru