signal programming
hai millis klas-talk di sini akan saya bahas tentang pemrograman sinyal yang terdapat
pada linux dan FreeBSD. sinyal ( signal ) sangat membantu programmer, sinyal yang
dibangkitkan suatu proses dari suatu aplikasi dapat dijadikan acuan agar proses lain
mulai bekerja ataupun berhenti, seperti lampu lalu - lintas. sinyal dibangkitkan oleh
proses ( misal : routine fork() membangkitkan sinyal SIGCHLD jika proses anak telah
selesai / terminate ) dan perangkat keras ( penekanan tombol ctrl-C untuk SIGINT /
interupt ).
agar sinyal dapat ditangkap ( catch ) harus didefinisikan terlebih dahulu handler nya
( fungsi yang akan dilaksanakan jika sinyal yang dimaksud tertangkap ). kemudian
memberikan fungsi pustaka yang biasa terdapat di Linux :
signal( nama sinyal, handler);
perhatikan contoh dibawah ini :
/* sinyal.c */
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<signal.h>
/* deklarasi handler sinyal ctrl-c */
void fungsi1(int signo);
/* untuk ctrl - z */
void fungsi2(int signo);
main()
{
signal(SIGINT, fungsi1);
signal(SIGSTP, fungsi2);
for(;;) pause;
}
void fungsi1( int signo) {
printf(" haiiii ctrl - c \a\n");
}
void fungsi2(int signo) {
printf("haiii ctrl - c \a\n");
}
contoh kedua ini untuk mengabaikan sinyal yang didapat dari keyboard.
/* ignore.c */
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<signal.h>
main()
{
signal(SIGINT, SIG_IGN);
signal(SIGSTP, SIG_IGN);
for(;;) pause;
}
untuk meng compile gunakan :
cc sinyal.c -o sinyal
cc ignore.c -o ignore
dan eksekusi :
$ ./signal
/* proses.c */
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<signal.h>
#include<sys/wait.h>
int anak;
void fungsi(int signo);
main()
{
signal(SIGCHLD, fungsi);
if((anak = fork()) == -1) {
perror("gagal fork \n");
exit(1);
}
else if(anak) { /* ini parent */
printf(" hallo ini proses parent ..... wait \n");
wait(&status);
}
else {
printf("halooooo ini child \n");
}
}
void fungsi(int signo) {
printf(" child selesai ...................\n");
printf(" fungsi......fungsi ........3x \n");
}
semoga tutorial pendek ini membantu linuxer di klas-talk, linux bukanlah sekedar
server suatu jaringan. Tapi berguna untuk studi kasus bagi yang ingin memperdalam di
bidang sistem operasi, atawa mungkin pengembangan berbagai macam sistem.
--
_______________________________________________
Get your free email from http://www.graffiti.net
Powered by Outblaze
---------------------------------------------------------------------
Jumlah pelanggan (updated daily): 220
Untuk berhenti berlangganan, kirim email ke: [EMAIL PROTECTED]
Arsip milis, raw: http://klas.regex.com/archive/
Arsip milis, hyperlink: http://klas.regex.com/arsipmilis/arsip/