October 15, 2008 thumb Send and Receive Message

tipntrick-computer.blogspot.com

source code berikut ini mengimplemntasikan tentang bagaimana sebuah proses dalam sistem operasi menerima dan mengirim pesan …..

permasalhanya sebagai berikut :
Indonesia akan mengikuti lomba lari estafet dalam olimpiade beijing 2008, simulasikan dengan menggunkan sebuah parent proses yang mengcreate 5 anak proses yang mana anak proses tersebut akan di representasikan sebagai 5 orang yang sedang berlari, pertama tongkat estafet bertuliskan “Praktikum Sisop 2008” dibawa oleh Debian, lalu Ubuntu, Mandrive Suse dan terakhir ke Dewalinux lalu kembali lagi ke Debian begitu seterusnya….?

=======================================================================================
#include “stdlib.h”
#include “unistd.h”
#include “sys/types.h”
#include “sys/ipc.h”
#include “sys/msg.h”
#include “stdio.h”
#include “string.h”
#define MSGSZ 30
#define FROMDEBIAN 1
#define FROMUBUNTU 2
#define FROMMANDRIVA 3
#define FROMSUSE 4
#define FROMDEWALINUX 5
#define TODEBIAN 5
#define TOUBUNTU 1
#define TOMANDRIVA 2
#define TOSUSE 3
#define TODEWALINUX 4
typedef struct msgbuf {
long mtype;
char mtext[MSGSZ];
} message_buf;

void debian();
void ubuntu();
void mandriva();
void suse();
void dewalinux();

int main(){
int s=0;
if(fork()==0){
debian();
}else{
if(fork()==0){
ubuntu();
}else{
if(fork()==0){
mandriva();
}else{
if(fork()==0){
suse();
}else{
if(fork()==0){
dewalinux();
}else{
int s;
printf(“OLIMPIADE BEIJING 2008 LOMBA LARI ESTAFET\n\n”);
printf(“AMBIL POSISI : 1 2 …….. “);
scanf(“%d”,&s);
int msqid;
int msgflg = IPC_CREAT | 0666;
key_t key;
message_buf sbuf;
size_t buf_length;
key = 1234;
if (0>(msqid = msgget(key, msgflg )) ) {
perror(“msgget”);
return(1);
}
sbuf.mtype = TODEBIAN;
strcpy(sbuf.mtext, “Praktikum Sisop 2008”);
buf_length = strlen(sbuf.mtext) + 1 ;
if (0>msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) ) {
printf (“%d, %d, %s, %d\n”, msqid, sbuf.mtype, sbuf.mtext, buf_length);
perror(“msgsnd”);
return(1);
}
}
}
}
}
}
return(0);
}

void debian(){
int msqid;
int msgflg = IPC_CREAT | 0666;
key_t key;
message_buf sbuf;
size_t buf_length;
key = 1234;
int i=0;
while(3>i){
if ( 0>(msqid = msgget(key, 0666))) {
printf(“tidak mendapat pesan \n\n”);
return;
}
i++;
if (0> msgrcv(msqid, &sbuf, MSGSZ, FROMDEWALINUX, 0)) {
printf(“TIDAK menerima pesan \n\n”);
return;
}
/*melakukan jawaban atas pesan yang diterima*/
printf(“(%s) —> DEBIAN(%d) “, sbuf.mtext,getpid());
/*mencoba mengirim pesan kepada UBUNTU*/
if (0>(msqid = msgget(key, msgflg )) ) {
perror(“msgget”);
return;
}
/*berhasil meminta slot pesan untukdiberikan ke ubuntu*/
sbuf.mtype = TOUBUNTU;
buf_length = strlen(sbuf.mtext) + 1 ;
if (0>msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) ) {
printf (“%d, %d, %s, %d\n”, msqid, sbuf.mtype, sbuf.mtext, buf_length);
perror(“msgsnd”);
return;
}else{ printf(” lanjut UBUNTU \n”);}
}
}

void ubuntu(){
int msqid;
int msgflg = IPC_CREAT | 0666;
key_t key;
message_buf sbuf;
size_t buf_length;
key = 1234;
int i=0;
for(i=0;3>i;i++){
if (0>(msqid = msgget(key, 0666)) ) {
perror(“error dalam mendapatkan pesan (msgget)”);
return;
}

/*menerima pesan dari DEBIAN*/
if (0>msgrcv(msqid, &sbuf, MSGSZ, FROMDEBIAN, 0)) {
perror(“eror saat penerimaan pesan : msgrcv”);
return;
}

/*melakukan jawaban atas pesan yang diterima*/
printf(“(%s) di UBUNTU (%d) “, sbuf.mtext,getpid());

/*mencoba mengirim pesan kepada MANDRIVA*/
if (0>(msqid = msgget(key, msgflg ))) {
perror(“msgget”);
return;
}
/*berhasil meminta slot pesan untukdiberikan ke ubuntu*/
sbuf.mtype = TOMANDRIVA;
buf_length = strlen(sbuf.mtext) + 1 ;
if (0>msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) ) {
printf (“%d, %d, %s, %d\n”, msqid, sbuf.mtype, sbuf.mtext, buf_length);
perror(“msgsnd”);
return;
}else{ printf(” Lanjut MANDRIVA \n”, sbuf.mtext);}
}
}

void mandriva(){
int msqid;
int msgflg = IPC_CREAT | 0666;
key_t key;
message_buf sbuf;
size_t buf_length;
key = 1234;
int i=0;
for(i=0;3>i;i++){
if (0>(msqid = msgget(key, 0666))) {
perror(“error dalam mendapatkan pesan (msgget)”);
return;
}

/*menerima pesan dari DEBIAN*/
if (0>msgrcv(msqid, &sbuf, MSGSZ, FROMUBUNTU, 0) ) {
perror(“eror saat penerimaan pesan : msgrcv”);
return;
}

/*melakukan jawaban atas pesan yang diterima*/
printf(“(%s) di MANDRIVA (%d) “, sbuf.mtext,getpid());

/*mencoba mengirim pesan kepada MANDRIVA*/
if (0>(msqid = msgget(key, msgflg )) ) {
perror(“msgget”);
return;
}
/*berhasil meminta slot pesan untukdiberikan ke ubuntu*/
sbuf.mtype = TOSUSE;
buf_length = strlen(sbuf.mtext) + 1 ;
if (0>msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) ) {
printf (“%d, %d, %s, %d\n”, msqid, sbuf.mtype, sbuf.mtext, buf_length);
perror(“msgsnd”);
return;
}else{ printf(” Lanjut SUSE \n”, sbuf.mtext);}
}
}

void suse(){
int msqid;
int msgflg = IPC_CREAT | 0666;
key_t key;
message_buf sbuf;
size_t buf_length;
key = 1234;
int i=0;
for(i=0;3>i;i++){
if (0>(msqid = msgget(key, 0666)) ) {
perror(“error dalam mendapatkan pesan (msgget)”);
return;
}

/*menerima pesan dari DEBIAN*/
if (0>msgrcv(msqid, &sbuf, MSGSZ, FROMMANDRIVA, 0) ) {
perror(“eror saat penerimaan pesan : msgrcv”);
return;
}

/*melakukan jawaban atas pesan yang diterima*/
printf(“(%s) di SUSE (%d) “, sbuf.mtext,getpid());

/*mencoba mengirim pesan kepada MANDRIVA*/
if (0>(msqid = msgget(key, msgflg )) ) {
perror(“msgget”);
return;
}
/*berhasil meminta slot pesan untukdiberikan ke ubuntu*/
sbuf.mtype = TODEWALINUX;
buf_length = strlen(sbuf.mtext) + 1 ;
if (0>msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) ) {
printf (“%d, %d, %s, %d\n”, msqid, sbuf.mtype, sbuf.mtext, buf_length);
perror(“msgsnd”);
return;
}else{ printf(” LanjutDEWALINUX \n”, sbuf.mtext);}
}

}

void dewalinux(){
int msqid;
int msgflg = IPC_CREAT | 0666;
key_t key;
message_buf sbuf;
size_t buf_length;
key = 1234;
int i=0;
for(i=0;3>i;i++){
if (0>(msqid = msgget(key, 0666)) ) {
perror(“error dalam mendapatkan pesan (msgget)”);
return;
}
/*menerima pesan dari DEBIAN*/
if (0>msgrcv(msqid, &sbuf, MSGSZ, FROMSUSE, 0) ) {
perror(“eror saat penerimaan pesan : msgrcv”);
return;
}
/*melakukan jawaban atas pesan yang diterima*/
printf(“(%s) di DEWALINUX (%d) “, sbuf.mtext,getpid());
if(i==2){
printf(“\nFinish !!!! Allhamdulillah !!! juara 1 dari 1 peserta !!!\n”);
return;
}
/*mencoba mengirim pesan kepada Debian*/
if (0>(msqid = msgget(key, msgflg )) ) {
perror(“msgget”);
return;
}
/*berhasil meminta slot pesan untukdiberikan ke debian*/
sbuf.mtype = TODEBIAN;
buf_length = strlen(sbuf.mtext) + 1 ;
if (0>msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) ) {
printf (“%d, %d, %s, %d\n”, msqid, sbuf.mtype, sbuf.mtext, buf_length);
perror(“msgsnd”);
return;
}else{ printf(” Putar ke DEBIAN \n”, sbuf.mtext);}
}
}

=======================================================================================

begitulah source code buatan saya, mohon maaf jika ada kesalahan…
buat teman-teman satu praktikum dengan saya….MBACEM YO MBACEM REK TAPI DIPELAJARI..

Comments

total comments