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/

Kirim email ke