halo temen temen bertemu lagi dengan saya. pada kesempatan kali ini saya akan berbagi sedikit tentang fuse.
apa itu fuse??
Filesystem in Userspace (fuse) merupakan mekanisme sistem operasi untuk sistem operasi unix like yang memungkinkan pengguna tidak berhak istimewa menciptakan file system mereka sendiri tanpa mengubah kode kernel Hal ini dicapai dengan menjalankan kode file system di userspace.
langkah langkah instalasi fuse di linux
1, Download fuse dari http://fuse.sourceforge.net/ pada bagian Download stable release
2. extract file tar.gz dan masuk ke direktori fuse. (ketikkan "tar -xvzf fuse-2.9.4.tar.gz" di terminal)
3. lakukan instalasi fuse dengan cara
A. gunakan hak akses super user (ketikkan "sudo su" di terminal)
B. ketikkan perintah ./configure
C. ketikkan perintah make
D. ketikkan perintah make install
4. fuse sudah terinstal dan siap digunakan
berikut langkah langkah membuat program fuse sederhana yaitu membuat suatu direktori tertentu menadi sebuah mount directory
1. ketikkan kode berikut di text editor
#include <fuse.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <sys/statfs.h>
static const char *dirpath = "/home/Faiq/Documents";
static int xmp_getattr(const char *path, struct stat *stbuf)
{
int res;
char fpath[1000];
sprintf(fpath,"%s%s",dirpath,path);
res = lstat(fpath, stbuf);
if(res == -1)
{
return -errno;
}
return 0;
}
static int xmp_getdir(const char *path, fuse_dirh_t h, fuse_dirfil_t filler)
{
char fpath[1000];
if(strcmp(path,"/") == 0)
{
path=dirpath;
sprintf(fpath,"%s",path);
}
else sprintf(fpath, "%s%s",dirpath,path);
int res = 0;
DIR *dp;
struct dirent *de;
dp = opendir(fpath);
if(dp==NULL)
{
return -errno;
}
while((de = readdir(dp))!=NULL)
{
res = filler(h, de->d_name, de->d_type);
if(res!=0) break;
}
closedir(dp);
return res;
}
static struct fuse_operations xmp_oper =
{
.getattr = xmp_getattr,
//.readlink = xmp_readlink,
.getdir = xmp_getdir,
//.mknod = xmp_mknod,
//.mkdir = xmp_mkdir,
//.symlink = xmp_symlink,
//.unlink = xmp_unlink,
//.rmdir = xmp_rmdir,
//.rename = xmp_rename,
//.link = xmp_link,
//.chmod = xmp_chmod,
//.chown = xmp_chown,
//.truncate = xmp_truncate,
//.utime = xmp_utime,
//.open = xmp_open,
//.read = xmp_read,
//.write = xmp_write,
//.release = xmp_release,
//.fsync = xmp_fsync,
//.readdir = hello_readdir
};
int main(int argc, char *argv[])
{
return fuse_main(argc, argv, &xmp_oper);
}
Ubah static const char *dirpath = "/home/Faiq/Documents"; sesuai dengan folder yang akan difusekan
2. compile program dengan comand gcc -Wall namafile,c `pkg-config fuse --cflags --libs` -o namafile.o
3. buat sebuah directory baru bernama zzz di directory home
4. run program dengan mengetikkan ./namafile.o /zzz
5. untuk mengecek nya buka folder tmp yg kamu mount maka pasti akan ada file yg sama seperti yg ada di folder documents mu hehe
terima kasih temen2 atas perhatiannya semoga bermanfaat
Sabtu, 28 November 2015
Sabtu, 07 November 2015
IPC & THREAD
halo teman teman
pada kesempatan kali ini saya akan berbagi sedikit tentang thread dan ipc.
Apa itu thread?
merujuk pada modul 4 materi sistem operasi
"Thread adalah bagian kecil dari suatu proses yang bisa di jadwalkan oleh sistem operasi."
apa itu ipc?
IPC (Interprocess Communincation)
Interprocess Communication adalah suata cara untuk melakukan pertukaran data antara
satu proses dengan proses lainnya, baik itu proses yang berada di dalam komputer yang
sama, atau komputer jarak jauh yang terhubung melalui jaringan.
a. Pipes
Pipe merupakan komunikasi sequensial antar proses yang saling terelasi, namun
pipe memiliki kelemahan yaitu hanya bisa digunakan untuk komunikasi antar proses
yang saling berhubungan, dan komunikasinya yang dilakukan adalah secara
sequensial.
b. Message Queue
Sistem berkirim pesan adalah proses komunikasi antar bagian sistem untuk
membagi variabel yang dibutuhkan. Proses ini menyediakan dua operasi yaitu
mengirim pesan dan menerima pesan.
c. Shared Memory
Sistem Berbagi Memori merupakan salah satu cara komunikasi antar proses dengan
cara mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antar
proses. Alamat dan besar alokasi memori yang digunakan biasanya ditentukan oleh
pembuat program. Pada metode ini, sistem akan mengatur proses mana yang akan memakai memori pada waktu tertentu sehingga pekerjaan dapat dilakukan secara
efektif.
d. Socket
Bentuk dari komunikasi yaitu UDP dan TCP menggunakan abstraksi socket yang
menyediakan endpoint untuk komunikasi antar proses. Socket bisa dijalankan di
berbagai platform(BSD UNIIX, UNIX, Linux, Windows, & Machintos OS).
hmm sekarang saya akan berbagi cara membuat
thread dan shared memory dengan menggunakan bahasa c di sistem operasi linux
1. thread
yg pertama kalian harus tau cara mengkompile file thread dengan menggunakan linux sedikit berbeda dengan cara biasa kita mengcompile file.c, caranya mudah kalian tinggal ketikkan
gcc namafile.c -o namafile.o -lpthread
di terminal kalian
nah langsung saja setelah kalian sudah mengerti cara untuk mengcompile file c yg memiliki thread sekarang saya akan berbagi codingan thread. sebuah music player menggunakan terminal.
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
pthread_t tid[7];
int n;
char lagu[10];
char ads[100];
char dummy;
void* playandcount(void *arg)
{
unsigned long i=0;
pthread_t id=pthread_self();
int iter;
if(pthread_equal(id,tid[1]))
{
system("clear");
printf(">>help\n");
printf(">>list\n");
printf(">>play\n");
printf(">>pause\n");
printf(">>continue\n");
printf(">>stop\n");
}
else if(pthread_equal(id,tid[2]))
{
system("clear");
chdir ("/home/faiq/sisopmodul3/playlist");
system("ls | grep .mp3");
}
else if(pthread_equal(id,tid[3]))
{
system("pkill mpg123");
system("clear");
snprintf(ads, sizeof(ads), "mpg123 %s",lagu);
system(ads);
}
else if(pthread_equal(id, tid[4]))
{
system("clear");
sleep(n);
system("pkill -STOP mpg123");
}
else if(pthread_equal(id, tid[5]))
{
system("clear");
sleep(n);
system("pkill -CONT mpg123");
}
else if(pthread_equal(id,tid[6]))
{
system("clear");
sleep(n);
system("pkill mpg123");
}
return NULL;
}
int main(void)
{
system("clear");
while(1)
{
int flag=0;
char comm[10];
int i=0;
int err=0;
printf("press help to see menu\n");
scanf("%s",comm);
if (err!=0) printf("\ncan't create thread : [%s]", strerror(err));
else if (strcmp(comm,"help")==0) err=pthread_create(&(tid[1]), NULL, &playandcount, NULL);
else if (strcmp(comm,"list")==0) err=pthread_create(&(tid[2]), NULL, &playandcount, NULL);
else if (strcmp(comm,"play")==0)
{
scanf("%s",lagu);
err=pthread_create(&(tid[3]), NULL, &playandcount, NULL);
}
else if (strcmp(comm,"pause")==0)
{
scanf("%d",&n);
err=pthread_create(&(tid[4]), NULL, &playandcount, NULL);
}
else if (strcmp(comm,"continue")==0)
{
scanf("%d",&n);
err=pthread_create(&(tid[5]), NULL, &playandcount, NULL);
}
else if (strcmp(comm,"stop")==0)
{
scanf("%d",&n);
err=pthread_create(&(tid[6]), NULL, &playandcount, NULL);
}
else printf("Wrong Input\n");
}
return 0;
sedikit penjelasan tentang codingan diatas adalah sebuah music player yg dapat mengeluarkan beberapa menu untuk digunakan diantaranya "help" untuk melihat menu utama , "list" untuk melihat semua lagu yg ada pada sebuah directory, "play" untuk memainkan sebuah lagu "pause" untuk menghentikan sementara sebuah lagu dan stop untuk menghentikan lagu.
berikut cara mengkompile file dengan thread
dan berikut adalah codingan program untuk pembeli
pada kesempatan kali ini saya akan berbagi sedikit tentang thread dan ipc.
Apa itu thread?
merujuk pada modul 4 materi sistem operasi
"Thread adalah bagian kecil dari suatu proses yang bisa di jadwalkan oleh sistem operasi."
apa itu ipc?
Interprocess Communication adalah suata cara untuk melakukan pertukaran data antara
satu proses dengan proses lainnya, baik itu proses yang berada di dalam komputer yang
sama, atau komputer jarak jauh yang terhubung melalui jaringan.
a. Pipes
Pipe merupakan komunikasi sequensial antar proses yang saling terelasi, namun
pipe memiliki kelemahan yaitu hanya bisa digunakan untuk komunikasi antar proses
yang saling berhubungan, dan komunikasinya yang dilakukan adalah secara
sequensial.
b. Message Queue
Sistem berkirim pesan adalah proses komunikasi antar bagian sistem untuk
membagi variabel yang dibutuhkan. Proses ini menyediakan dua operasi yaitu
mengirim pesan dan menerima pesan.
c. Shared Memory
Sistem Berbagi Memori merupakan salah satu cara komunikasi antar proses dengan
cara mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antar
proses. Alamat dan besar alokasi memori yang digunakan biasanya ditentukan oleh
pembuat program. Pada metode ini, sistem akan mengatur proses mana yang akan memakai memori pada waktu tertentu sehingga pekerjaan dapat dilakukan secara
efektif.
d. Socket
Bentuk dari komunikasi yaitu UDP dan TCP menggunakan abstraksi socket yang
menyediakan endpoint untuk komunikasi antar proses. Socket bisa dijalankan di
berbagai platform(BSD UNIIX, UNIX, Linux, Windows, & Machintos OS).
hmm sekarang saya akan berbagi cara membuat
thread dan shared memory dengan menggunakan bahasa c di sistem operasi linux
1. thread
yg pertama kalian harus tau cara mengkompile file thread dengan menggunakan linux sedikit berbeda dengan cara biasa kita mengcompile file.c, caranya mudah kalian tinggal ketikkan
gcc namafile.c -o namafile.o -lpthread
di terminal kalian
nah langsung saja setelah kalian sudah mengerti cara untuk mengcompile file c yg memiliki thread sekarang saya akan berbagi codingan thread. sebuah music player menggunakan terminal.
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
pthread_t tid[7];
int n;
char lagu[10];
char ads[100];
char dummy;
void* playandcount(void *arg)
{
unsigned long i=0;
pthread_t id=pthread_self();
int iter;
if(pthread_equal(id,tid[1]))
{
system("clear");
printf(">>help\n");
printf(">>list\n");
printf(">>play\n");
printf(">>pause\n");
printf(">>continue\n");
printf(">>stop\n");
}
else if(pthread_equal(id,tid[2]))
{
system("clear");
chdir ("/home/faiq/sisopmodul3/playlist");
system("ls | grep .mp3");
}
else if(pthread_equal(id,tid[3]))
{
system("pkill mpg123");
system("clear");
snprintf(ads, sizeof(ads), "mpg123 %s",lagu);
system(ads);
}
else if(pthread_equal(id, tid[4]))
{
system("clear");
sleep(n);
system("pkill -STOP mpg123");
}
else if(pthread_equal(id, tid[5]))
{
system("clear");
sleep(n);
system("pkill -CONT mpg123");
}
else if(pthread_equal(id,tid[6]))
{
system("clear");
sleep(n);
system("pkill mpg123");
}
return NULL;
}
int main(void)
{
system("clear");
while(1)
{
int flag=0;
char comm[10];
int i=0;
int err=0;
printf("press help to see menu\n");
scanf("%s",comm);
if (err!=0) printf("\ncan't create thread : [%s]", strerror(err));
else if (strcmp(comm,"help")==0) err=pthread_create(&(tid[1]), NULL, &playandcount, NULL);
else if (strcmp(comm,"list")==0) err=pthread_create(&(tid[2]), NULL, &playandcount, NULL);
else if (strcmp(comm,"play")==0)
{
scanf("%s",lagu);
err=pthread_create(&(tid[3]), NULL, &playandcount, NULL);
}
else if (strcmp(comm,"pause")==0)
{
scanf("%d",&n);
err=pthread_create(&(tid[4]), NULL, &playandcount, NULL);
}
else if (strcmp(comm,"continue")==0)
{
scanf("%d",&n);
err=pthread_create(&(tid[5]), NULL, &playandcount, NULL);
}
else if (strcmp(comm,"stop")==0)
{
scanf("%d",&n);
err=pthread_create(&(tid[6]), NULL, &playandcount, NULL);
}
else printf("Wrong Input\n");
}
return 0;
sedikit penjelasan tentang codingan diatas adalah sebuah music player yg dapat mengeluarkan beberapa menu untuk digunakan diantaranya "help" untuk melihat menu utama , "list" untuk melihat semua lagu yg ada pada sebuah directory, "play" untuk memainkan sebuah lagu "pause" untuk menghentikan sementara sebuah lagu dan stop untuk menghentikan lagu.
berikut cara mengkompile file dengan thread
walaaa.. setelah dikompile munculah programnya
2. shared memory
seperti yg telah saya tulis tadi shared memory adalah salah satu cara komunikasi antar proses dengan cara mengalokasikan suatu alamat memori untuk dipakai berkomunikasi antar proses. Alamat dan besar alokasi memori yang digunakan biasanya ditentukan oleh pembuat program.
berikut saya akan berbagi codingan tentang shared memory
sebuah program untuk seorang pedagang computer yg dapat memasukkan list barang yg akan dijual beserta stoknya dan sebuah program untuk pembeli komputer yg dapat digunakan untuk memesan sebuah barang dan melihat stoknya
berikut adalah codingan program untuk pedagang
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
struct STOK
{
int RAM;
int harddisk;
int motherboard;
int PSU;
int VGA;
int processor;
};
int main()
{
key_t KEY;
int ID;
struct STOK *data;
char nama_barang[50];
int pilihan;
int tambah;
KEY = ftok(".", 'x');
ID = shmget(KEY, sizeof(struct STOK), IPC_CREAT | 0666);
data = (struct STOK *) shmat(ID, NULL, 0);
data->RAM = 0;
data->harddisk = 0;
data->motherboard = 0;
data->PSU = 0;
data->VGA = 0;
data->processor = 0;
while(1)
{
printf("\n\n1 = Lihat Stok Barang\n");
printf("2 = Tambah Barang\n\n");
scanf("%d", &pilihan);
if (pilihan == 1)
{
system("clear");
printf("STOK RAM = %d \n",data->RAM);
printf("STOK harddisk = %d \n",data->harddisk);
printf("STOK motherboard = %d \n",data->motherboard);
printf("STOK PSU = %d \n",data->PSU);
printf("STOK VGA = %d \n",data->VGA);
printf("STOK processor = %d \n",data->processor);
}
else if(pilihan == 2)
{
system("clear");
printf("Barang yang Dijual: \n");
printf("RAM \nharddisk \nmotherboard \nPSU \nVGA \nprocessor\n");
printf("\n\nKetikkan nama barang yang ingin ditambah\n");
scanf("%s", nama_barang);
if (strcmp(nama_barang,"RAM")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->RAM += tambah;
printf("STOK RAM = %d \n", data->RAM);
}
else if (strcmp(nama_barang,"harddisk")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->harddisk += tambah;
printf("STOK harddisk = %d \n", data->harddisk);
}
else if (strcmp(nama_barang,"motherboard")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->motherboard += tambah;
printf("STOK motherboard = %d \n", data->motherboard);
}
else if (strcmp(nama_barang,"PSU")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->PSU += tambah;
printf("STOK PSU = %d \n", data->PSU);
}
else if (strcmp(nama_barang,"VGA")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->VGA += tambah;
printf("STOK VGA = %d \n", data->VGA);
}
else if (strcmp(nama_barang,"processor")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->processor += tambah;
printf("STOK processor = %d \n", data->processor);
}
else printf("Barang Tidak Ada\n");
}
else getchar();
}
}
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
struct STOK
{
int RAM;
int harddisk;
int motherboard;
int PSU;
int VGA;
int processor;
};
int main()
{
key_t KEY;
int ID;
struct STOK *data;
char nama_barang[50];
int pilihan;
int tambah;
KEY = ftok(".", 'x');
ID = shmget(KEY, sizeof(struct STOK), IPC_CREAT | 0666);
data = (struct STOK *) shmat(ID, NULL, 0);
data->RAM = 0;
data->harddisk = 0;
data->motherboard = 0;
data->PSU = 0;
data->VGA = 0;
data->processor = 0;
while(1)
{
printf("\n\n1 = Lihat Stok Barang\n");
printf("2 = Tambah Barang\n\n");
scanf("%d", &pilihan);
if (pilihan == 1)
{
system("clear");
printf("STOK RAM = %d \n",data->RAM);
printf("STOK harddisk = %d \n",data->harddisk);
printf("STOK motherboard = %d \n",data->motherboard);
printf("STOK PSU = %d \n",data->PSU);
printf("STOK VGA = %d \n",data->VGA);
printf("STOK processor = %d \n",data->processor);
}
else if(pilihan == 2)
{
system("clear");
printf("Barang yang Dijual: \n");
printf("RAM \nharddisk \nmotherboard \nPSU \nVGA \nprocessor\n");
printf("\n\nKetikkan nama barang yang ingin ditambah\n");
scanf("%s", nama_barang);
if (strcmp(nama_barang,"RAM")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->RAM += tambah;
printf("STOK RAM = %d \n", data->RAM);
}
else if (strcmp(nama_barang,"harddisk")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->harddisk += tambah;
printf("STOK harddisk = %d \n", data->harddisk);
}
else if (strcmp(nama_barang,"motherboard")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->motherboard += tambah;
printf("STOK motherboard = %d \n", data->motherboard);
}
else if (strcmp(nama_barang,"PSU")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->PSU += tambah;
printf("STOK PSU = %d \n", data->PSU);
}
else if (strcmp(nama_barang,"VGA")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->VGA += tambah;
printf("STOK VGA = %d \n", data->VGA);
}
else if (strcmp(nama_barang,"processor")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&tambah);
data->processor += tambah;
printf("STOK processor = %d \n", data->processor);
}
else printf("Barang Tidak Ada\n");
}
else getchar();
}
}
dan berikut adalah codingan program untuk pembeli
/* Client */
//#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
struct STOK
{
int RAM;
int harddisk;
int motherboard;
int PSU;
int VGA;
int processor;
};
int main(void)
{
key_t KEY;
int ID;
struct STOK *data;
char nama_barang[15];
int pilih;
int beli;
KEY = ftok(".", 'x');
ID = shmget(KEY, sizeof(struct STOK), 0666);
data = (struct STOK *) shmat(ID, NULL, 0);
while(1)
{
printf("\n\n1 = Lihat Stok Barang\n");
printf("2 = Beli Barang\n\n");
scanf("%d",&pilih);
if(pilih == 1)
{
system("clear");
printf("Jumlah RAM = %d \n",data->RAM);
printf("Jumlah harddisk = %d \n",data->harddisk);
printf("Jumlah motherboard = %d \n",data->motherboard);
printf("Jumlah PSU = %d \n",data->PSU);
printf("Jumlah VGA = %d \n",data->VGA);
printf("Jumlah processor = %d \n",data->processor);
}
else if(pilih == 2)
{
system("clear");
printf("Barang yang Dijual: \n");
printf("RAM \nharddisk \nmotherboard \nPSU \nVGA \nprocessor\n");
printf("\n\nKetikkan nama barang yang ingin ditambah\n");
scanf("%s", nama_barang);
if (strcmp(nama_barang,"RAM")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->RAM)
{
printf("Jumlah yang dibeli melebihi stok\n");
}
else
{
printf("Anda membeli %d RAM\n",beli);
data->RAM -= beli;
}
}
else if (strcmp(nama_barang,"harddisk")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->harddisk)
{
printf("Anda membeli terlalu banyak\n");
}
else
{
printf("Anda membeli %d harddisk\n",beli);
data->harddisk -= beli;
}
}
else if (strcmp(nama_barang,"motherboard")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->motherboard)
{
printf("Anda membeli terlalu banyak\n");
}
else
{
printf("Anda membeli %d motherboard\n",beli);
data->motherboard -= beli;
}
}
else if (strcmp(nama_barang,"PSU")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->PSU)
{
printf("Anda membeli terlalu banyak\n");
}
else
{
printf("Anda membeli %d PSU\n",beli);
data->PSU -= beli;
}
}
else if (strcmp(nama_barang,"VGA")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->VGA)
{
printf("Anda membeli terlalu banyak\n");
}
else
{
printf("Anda membeli %d VGA\n",beli);
data->VGA -= beli;
}
}
else if (strcmp(nama_barang,"processor")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->processor)
{
printf("Anda membeli terlalu banyak\n");
}
else
{
printf("Anda membeli %d processor\n",beli);
data->processor -= beli;
}
}
else printf("Barang Tidak Ada\n");
}
else getchar();
}
}
//#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
struct STOK
{
int RAM;
int harddisk;
int motherboard;
int PSU;
int VGA;
int processor;
};
int main(void)
{
key_t KEY;
int ID;
struct STOK *data;
char nama_barang[15];
int pilih;
int beli;
KEY = ftok(".", 'x');
ID = shmget(KEY, sizeof(struct STOK), 0666);
data = (struct STOK *) shmat(ID, NULL, 0);
while(1)
{
printf("\n\n1 = Lihat Stok Barang\n");
printf("2 = Beli Barang\n\n");
scanf("%d",&pilih);
if(pilih == 1)
{
system("clear");
printf("Jumlah RAM = %d \n",data->RAM);
printf("Jumlah harddisk = %d \n",data->harddisk);
printf("Jumlah motherboard = %d \n",data->motherboard);
printf("Jumlah PSU = %d \n",data->PSU);
printf("Jumlah VGA = %d \n",data->VGA);
printf("Jumlah processor = %d \n",data->processor);
}
else if(pilih == 2)
{
system("clear");
printf("Barang yang Dijual: \n");
printf("RAM \nharddisk \nmotherboard \nPSU \nVGA \nprocessor\n");
printf("\n\nKetikkan nama barang yang ingin ditambah\n");
scanf("%s", nama_barang);
if (strcmp(nama_barang,"RAM")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->RAM)
{
printf("Jumlah yang dibeli melebihi stok\n");
}
else
{
printf("Anda membeli %d RAM\n",beli);
data->RAM -= beli;
}
}
else if (strcmp(nama_barang,"harddisk")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->harddisk)
{
printf("Anda membeli terlalu banyak\n");
}
else
{
printf("Anda membeli %d harddisk\n",beli);
data->harddisk -= beli;
}
}
else if (strcmp(nama_barang,"motherboard")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->motherboard)
{
printf("Anda membeli terlalu banyak\n");
}
else
{
printf("Anda membeli %d motherboard\n",beli);
data->motherboard -= beli;
}
}
else if (strcmp(nama_barang,"PSU")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->PSU)
{
printf("Anda membeli terlalu banyak\n");
}
else
{
printf("Anda membeli %d PSU\n",beli);
data->PSU -= beli;
}
}
else if (strcmp(nama_barang,"VGA")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->VGA)
{
printf("Anda membeli terlalu banyak\n");
}
else
{
printf("Anda membeli %d VGA\n",beli);
data->VGA -= beli;
}
}
else if (strcmp(nama_barang,"processor")==0)
{
printf("Masukkan jumlahnya : ");
scanf("%d",&beli);
if (beli > data->processor)
{
printf("Anda membeli terlalu banyak\n");
}
else
{
printf("Anda membeli %d processor\n",beli);
data->processor -= beli;
}
}
else printf("Barang Tidak Ada\n");
}
else getchar();
}
}
nah jika kita compile akan menjadi seperti ini
kedua program akan menghasilkan jumlah yg sama saat mengecek stok barang karena kedua program tersebut berbagi sebuah alamat memory yg sama.
begitulah yg dapat saya bagikan minggu ini semoga bermanfaat temen temen terima kasih...
Langganan:
Komentar (Atom)






