LAPORAN MODUL 3PRAKTIKUM SISTEM OPERASI
Kelompok 04
NIM / Nama : I Made Agus Oka Gunawan 1108605020I Gede Edy Mahaputra 1108605052
Asisten Praktikum : I Gede Wira Kusuma Jaya 1008605019Pembimbing : I Made Agus Setiawan, M.Kom, M.Sc
PROGRAM STUDI TEKNIK INFORMATIKAJURUSAN ILMU KOMPUTER – FMIPA
UNIVERSITAS UDAYANA
Bukit Jimbaran2013
LAPORAN MODUL 3PRAKTIKUM SISTEM OPERASI
Kelompok 04
NIM / Nama : I Made Agus Oka Gunawan 1108605020I Gede Edy Mahaputra 1108605052
Asisten Praktikum : I Gede Wira Kusuma Jaya 1008605019Pembimbing : I Made Agus Setiawan, M.Kom, M.Sc
PROGRAM STUDI TEKNIK INFORMATIKAJURUSAN ILMU KOMPUTER – FMIPA
UNIVERSITAS UDAYANA
Bukit Jimbaran2013
LAPORAN MODUL 3PRAKTIKUM SISTEM OPERASI
Kelompok 04
NIM / Nama : I Made Agus Oka Gunawan 1108605020I Gede Edy Mahaputra 1108605052
Asisten Praktikum : I Gede Wira Kusuma Jaya 1008605019Pembimbing : I Made Agus Setiawan, M.Kom, M.Sc
PROGRAM STUDI TEKNIK INFORMATIKAJURUSAN ILMU KOMPUTER – FMIPA
UNIVERSITAS UDAYANA
Bukit Jimbaran2013
ii
LEMBAR PENGESAHAN
Judul : Laporan Modul 3 Praktikum Sistem OperasiKelompok : 04Nim / Nama : I Made Agus Oka Gunawan 1108605020
I Gede Edy Mahaputra 1108605052
Semester : GENAPTahun Ajaran : 2012/2013
Menyetujui
Asisten Praktikum Dosen Pembimbing
I Gede Wira Kusuma Jaya I Made Agus Setiawan, M.Kom, M.Sc
iii
KATA PENGANTAR
Puji Syukur kami panjatkan kehadirat Tuhan Yang Maha Esa yang telah
memberikan rahmat serta karuniaNya kepada kami sehingga kami berhasil
menyelesaikan Laporan Praktikum Sistem Operasi ini dengan tepat pada
waktunya yang berjudul “IPC – Inter Process Communication”.
Kami menyadari bahwa Laporan ini masih jauh dari sempurna, oleh
karena itu kritik dan saran dari semua pihak yang bersifat membangun selalu kami
harapkan demi kesempurnaan Laporan ini.
Akhir kata kami ucapkan terima kasih keada semua pihak yang telah
berperan serta dalam penyusunan Laporan ini
Bukit Jimbaran, Juni 2013
Kelompok 04
iv
DAFTAR ISI
Halaman Judul ..................................................................................................i
Lembar Pengesahan .........................................................................................ii
Kata Pengantar ................................................................................................iii
DAFTAR ISI .....................................................................................................iv
MODUL 3 : IPC – Inter Process Communication .........................................1
1.1. Tujuan Praktikum ........................................................................................1
1.2. Indikator Pencapaian ...................................................................................1
1.3. Tugas Modul ................................................................................................1
1.3.1. Tugas Pendahuluan ..........................................................................1
1.4. Hasil dan Pembahasan ................................................................................6
1.4.1. System ..............................................................................................6
1.4.2. execl .................................................................................................13
1.4.3. fork ...................................................................................................21
1.4.4. pipe.c ................................................................................................29
1.4.5. fork.c ................................................................................................38
1.4.6. Signal.c.............................................................................................47
1.5. Kesimpulan dan Saran .................................................................................57
1.5.1. Kesimpulan.......................................................................................57
1.5.2. Saran ................................................................................................57
1.6. Daftar Pustaka ..............................................................................................57
v
MODUL III
1
Modul 3
IPC – Inter Process Communication
1.1 Tujuan Praktikum1. Praktikan diharapkan dapat memahami proses pemrograman C dan
proses kompilasinya di lingkungan Linux.2. Praktikan diharapkan dapat memahami bagaimana proses-proses dapat
saling berkomunikasi satu sama lain.
1.2 Indikator PencapaianPraktikan dapat memahami proses pemrograman C, proses
kompilasinya, serta bagaimana proses-proses dapat saling berkomunikasi satusama lain di lingkungan Linux.
1.3 Tugas Modul
1.3.1. Tugas Pendahuluan
Lakukanlah proses kompilasi terhadap beberapa kode dibawahini. Lakukan dengan 2 cara ,(a) single line command dan (b)menggunakan make. Lakukan pengamatan untuk setiap proses yangdilakukan.Langkah-Langkah Percobaan:
1. Buat Sebuah Folder untuk setiap percobaan, mis. Percobaan1,Percobaan2 dst.
2. Letakkan Kode Sumber (.c) untuk setiap percobaan dimasing-masing folder.
3. Untuk melakukan kompilasi, Lakukan untuk setiap percobaan,masuk ke setiap folder tersebut.
4. Lakukan proses kompilasi , misal nama kode sumber : soal1.c lakukan $gcc soal1.c, perhatikan apa yang terjadi, ada file apa
saja yg tercipta difolder tsb lakukan $gcc -o soal1 soal1.c, perhatikan apa yang terjadi
dalam folder tersebut untuk mengkompilasi dengan make, buat 1 file dengan nama
makefile, kemudian tentukan aturan-aturannya di dalam fileitu. kemudian setelah selesai, jalankan perintah $make.perhatikan apa yg terjadi dalam folder tersebut
2
Untuk lebih memperjelas perbedaannya, berikan nama outputyg berbeda antara make , dengan command line
Kode:
1. System
#include <stdio.h>#include <stdlib.h>#include <unistd.h>
void main(){
printf("Files in Directory are: \n");system("ls -l");
}
2. Execl
#include <stdio.h>#include <stdlib.h>#include <unistd.h>
void main(){
printf("Files in Directory are: \n");execl("/bin/ls","ls", "-l",0);
}
3. Fork
#include <stdio.h>#include <stdlib.h>#include <unistd.h>
void ChildProcess();
void main (){
int pid, cid;
pid = getpid();printf( "Fork demo! I am the parent (pid =
%d)\n",pid);
if (! fork())
3
{cid = getpid();printf("I am the child (cid=%d) of (pid =
%d)\n",cid,pid);ChildProcess();exit(0);
}
printf("Parent waiting here for thechild...\n");
wait(NULL);
printf("Child finished, parent quittingtoo!\n");}
void ChildProcess(){
int i;
sleep(1);for (i = 0; i < 10; i++){
printf("%d..\n",i);sleep(1);
}}
4. pipe.c
#include <stdio.h>#include <unistd.h>#include <sys/types.h>
int main(void){
int fd[2], nbytes;pid_t childpid;char string[] = "Hello, world!\n";char readbuffer[80];
pipe(fd);if((childpid = fork()) == -1){
perror("fork");exit(1);
}
if(childpid == 0){
4
/* Child process closes up input side ofpipe */
close(fd[0]);/* Send "string" through the output side of
pipe */write(fd[1], string, strlen(string));exit(0);}
else{
/* Parent process closes up output side ofpipe */
close(fd[1]);/* Read in a string from the pipe */nbytes = read(fd[0], readbuffer,
sizeof(readbuffer));printf("Received string: %s", readbuffer);
}
return(0);}
5. fork.c
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>
void main(){
pid_t pid;int rv;
switch(pid=fork()) {case -1:
perror("fork"); /* something went wrong */exit(1); /* parent exits */
case 0:printf(" CHILD: This is the child
process!\n");printf(" CHILD: My PID is %d\n", getpid());printf(" CHILD: My parent's PID is %d\n",
getppid());printf(" CHILD: Enter my exit status (make
it small): ");
5
scanf(" %d", &rv);printf(" CHILD: I'm outta here!\n");exit(rv);
default:printf("PARENT: This is the parent
process!\n");printf("PARENT: My PID is %d\n", getpid());printf("PARENT: My child's PID is %d\n",
pid);printf("PARENT: I'm now waiting for my
child toexit()...\n");
wait(&rv);printf("PARENT: My child's exit status is:
%d\n",WEXITSTATUS(rv));
printf("PARENT: I'm outta here!\n");}
}
6. Signal.c
#include <stdio.h>#include <signal.h>
void sighup(); /* routines child will call uponsigtrap */void sigint();void sigquit();
void main(){
int pid;/* get child process */
if ((pid = fork()) < 0) {perror("fork");exit(1);
}
if (pid == 0){/* child */signal(SIGHUP,sighup); /* set function
calls */signal(SIGINT,sigint);signal(SIGQUIT, sigquit);for(;;); /* loop for ever */
}else {
/* parent */
6
/* pid hold id of child */printf("\nPARENT: sending SIGHUP\n\n");kill(pid,SIGHUP);sleep(3); /* pause for 3 secs */printf("\nPARENT: sending SIGINT\n\n");kill(pid,SIGINT);sleep(3); /* pause for 3 secs */printf("\nPARENT: sending SIGQUIT\n\n");kill(pid,SIGQUIT);sleep(3);
}}
void sighup() {signal(SIGHUP,sighup); /* reset signal */printf("CHILD: I have received a SIGHUP\n");
}
void sigint(){signal(SIGINT,sigint); /* reset signal */printf("CHILD: I have received a SIGINT\n");
}
void sigquit(){printf("My DADDY has Killed me!!!\n");exit(0);
}
1.4 Hasil dan PembahasanPada subbab ini akan dibahas tentang hasil dari kompilasi beberapa
contoh program dengan menggunakan 2 cara yakni single line command dan
menggunakan perintah make. Berikut adalah hasil kompilasi program-
program tersebut:
1.4.1. System
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void main()
{
printf("Files in Directory are: \n");
7
system("ls -l");
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan1”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal1.c”.
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan1” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan1 “ untuk masuk ke folder “percobaan1”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal1.c” yang terletak di
folder tersebut.
4. Jika perintah di atas sudah dijalankan maka anda sudah berada
pada folder “percobaan1” . Kemudian lalukan proses kompilasi
pada kode program “soal1.c” dengan perintah “$gcc soal1.c”,
seperti gambar di bawah ini.
7
system("ls -l");
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan1”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal1.c”.
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan1” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan1 “ untuk masuk ke folder “percobaan1”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal1.c” yang terletak di
folder tersebut.
4. Jika perintah di atas sudah dijalankan maka anda sudah berada
pada folder “percobaan1” . Kemudian lalukan proses kompilasi
pada kode program “soal1.c” dengan perintah “$gcc soal1.c”,
seperti gambar di bawah ini.
7
system("ls -l");
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan1”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal1.c”.
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan1” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan1 “ untuk masuk ke folder “percobaan1”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal1.c” yang terletak di
folder tersebut.
4. Jika perintah di atas sudah dijalankan maka anda sudah berada
pada folder “percobaan1” . Kemudian lalukan proses kompilasi
pada kode program “soal1.c” dengan perintah “$gcc soal1.c”,
seperti gambar di bawah ini.
8
5. Kemudian dapat dilihat pada folder “percobaan1”, bahwa ada
perubahan yang terjadi, yaitu penambahan sebuah file dengan
nama “a.out” , dimana nama dari file tersebut secara otomatis
akan dibuat dan dengan ekstensi “.out”
6. File “a.out” ini seperti file dengan ekstensi “.exe” di windows,
sehingga bisa di-run. Adapun perintah untuk menjalankan
(mengerun) file ekstensi “a.out” adalah dengan mengetikkan
perintah “./a.out”, seperti gambar beikut ini.
8
5. Kemudian dapat dilihat pada folder “percobaan1”, bahwa ada
perubahan yang terjadi, yaitu penambahan sebuah file dengan
nama “a.out” , dimana nama dari file tersebut secara otomatis
akan dibuat dan dengan ekstensi “.out”
6. File “a.out” ini seperti file dengan ekstensi “.exe” di windows,
sehingga bisa di-run. Adapun perintah untuk menjalankan
(mengerun) file ekstensi “a.out” adalah dengan mengetikkan
perintah “./a.out”, seperti gambar beikut ini.
8
5. Kemudian dapat dilihat pada folder “percobaan1”, bahwa ada
perubahan yang terjadi, yaitu penambahan sebuah file dengan
nama “a.out” , dimana nama dari file tersebut secara otomatis
akan dibuat dan dengan ekstensi “.out”
6. File “a.out” ini seperti file dengan ekstensi “.exe” di windows,
sehingga bisa di-run. Adapun perintah untuk menjalankan
(mengerun) file ekstensi “a.out” adalah dengan mengetikkan
perintah “./a.out”, seperti gambar beikut ini.
9
7. Kemudian akan dilakukan percobaan kompilasi dengan
perintah “$gcc –o soal1 soal1.c”, maka akan terlihat tampilan
di bawah ini.
8. Kemudian dilakukan pengecekan pada folder “percobaan1”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal1”.
9
7. Kemudian akan dilakukan percobaan kompilasi dengan
perintah “$gcc –o soal1 soal1.c”, maka akan terlihat tampilan
di bawah ini.
8. Kemudian dilakukan pengecekan pada folder “percobaan1”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal1”.
9
7. Kemudian akan dilakukan percobaan kompilasi dengan
perintah “$gcc –o soal1 soal1.c”, maka akan terlihat tampilan
di bawah ini.
8. Kemudian dilakukan pengecekan pada folder “percobaan1”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal1”.
10
9. Kemudian “soal1” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal1”, seperti gambar
berikut.
10. Selanjutnya akan dilakukan kompilasi “soal1.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
10
9. Kemudian “soal1” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal1”, seperti gambar
berikut.
10. Selanjutnya akan dilakukan kompilasi “soal1.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
10
9. Kemudian “soal1” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal1”, seperti gambar
berikut.
10. Selanjutnya akan dilakukan kompilasi “soal1.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
11
11. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
12. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
11
11. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
12. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
11
11. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
12. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
12
13. Setelah perintah “$make” dijalankan maka terjadi penambahan
file lagi dalam folder, seperti gambar di bawah ini.
14. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make1”. Dimana “make1” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
12
13. Setelah perintah “$make” dijalankan maka terjadi penambahan
file lagi dalam folder, seperti gambar di bawah ini.
14. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make1”. Dimana “make1” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
12
13. Setelah perintah “$make” dijalankan maka terjadi penambahan
file lagi dalam folder, seperti gambar di bawah ini.
14. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make1”. Dimana “make1” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
13
Dari tiga percobaan kompilasi yang dilakukan, ketiga file
executable yang dihasilkan melakukan operasi yang sama.
1.4.2. execl
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void main()
{
printf("Files in Directory are: \n");
execl("/bin/ls","ls", "-l",0);
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan2”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal2.c”.
13
Dari tiga percobaan kompilasi yang dilakukan, ketiga file
executable yang dihasilkan melakukan operasi yang sama.
1.4.2. execl
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void main()
{
printf("Files in Directory are: \n");
execl("/bin/ls","ls", "-l",0);
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan2”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal2.c”.
13
Dari tiga percobaan kompilasi yang dilakukan, ketiga file
executable yang dihasilkan melakukan operasi yang sama.
1.4.2. execl
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void main()
{
printf("Files in Directory are: \n");
execl("/bin/ls","ls", "-l",0);
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan2”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal2.c”.
14
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan2” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan2 “ untuk masuk ke folder “percobaan2”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal2.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan2” . Kemudian
lalukan proses kompilasi pada kode program “soal2.c” dengan
perintah “$gcc soal2.c”, seperti gambar di bawah ini.
14
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan2” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan2 “ untuk masuk ke folder “percobaan2”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal2.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan2” . Kemudian
lalukan proses kompilasi pada kode program “soal2.c” dengan
perintah “$gcc soal2.c”, seperti gambar di bawah ini.
14
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan2” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan2 “ untuk masuk ke folder “percobaan2”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal2.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan2” . Kemudian
lalukan proses kompilasi pada kode program “soal2.c” dengan
perintah “$gcc soal2.c”, seperti gambar di bawah ini.
15
4. Karena pada program di atas ada peringatan error , maka
terlebih dahulu dilakukan perbaikan kode program agar bisa
dikompilasi, terjadi peringatan error karena tipe data pada
parameter terakhir fungsi execl tidak sesuai. Untuk itu, ubah baris
ini pada soal2.c menjadi
execl(“/bin/ls”,”ls”,”-l”,(char*)0);
15
4. Karena pada program di atas ada peringatan error , maka
terlebih dahulu dilakukan perbaikan kode program agar bisa
dikompilasi, terjadi peringatan error karena tipe data pada
parameter terakhir fungsi execl tidak sesuai. Untuk itu, ubah baris
ini pada soal2.c menjadi
execl(“/bin/ls”,”ls”,”-l”,(char*)0);
15
4. Karena pada program di atas ada peringatan error , maka
terlebih dahulu dilakukan perbaikan kode program agar bisa
dikompilasi, terjadi peringatan error karena tipe data pada
parameter terakhir fungsi execl tidak sesuai. Untuk itu, ubah baris
ini pada soal2.c menjadi
execl(“/bin/ls”,”ls”,”-l”,(char*)0);
16
5. Setelah dilakukan perbaikan, maka dapat dilakukan
kompilasi ulang untuk mengecek ulang kode program yang
telah diperbaiki.
6. Pada perintah di atas, terlihat bahwa tidak ada peringatan
kesalahan pada program, maka terjadi perubahan pada
folder “percobaan2”, yaitu penambahan file “a.out”
7. Setelah dilakukan perbaikan, maka file “a.out” akan coba
dirun. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
16
5. Setelah dilakukan perbaikan, maka dapat dilakukan
kompilasi ulang untuk mengecek ulang kode program yang
telah diperbaiki.
6. Pada perintah di atas, terlihat bahwa tidak ada peringatan
kesalahan pada program, maka terjadi perubahan pada
folder “percobaan2”, yaitu penambahan file “a.out”
7. Setelah dilakukan perbaikan, maka file “a.out” akan coba
dirun. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
16
5. Setelah dilakukan perbaikan, maka dapat dilakukan
kompilasi ulang untuk mengecek ulang kode program yang
telah diperbaiki.
6. Pada perintah di atas, terlihat bahwa tidak ada peringatan
kesalahan pada program, maka terjadi perubahan pada
folder “percobaan2”, yaitu penambahan file “a.out”
7. Setelah dilakukan perbaikan, maka file “a.out” akan coba
dirun. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
17
8. Terlihat bahwa tidak terdapat peringatan lagi, sehingga
dapat dilanjutkan dengan melakukan percobaan kompilasi
dengan perintah “$gcc –o soal2 soal2.c”, maka akan terlihat
tampilan di bawah ini.
9. Kemudian dilakukan pengecekan pada folder “percobaan2”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal2”.
17
8. Terlihat bahwa tidak terdapat peringatan lagi, sehingga
dapat dilanjutkan dengan melakukan percobaan kompilasi
dengan perintah “$gcc –o soal2 soal2.c”, maka akan terlihat
tampilan di bawah ini.
9. Kemudian dilakukan pengecekan pada folder “percobaan2”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal2”.
17
8. Terlihat bahwa tidak terdapat peringatan lagi, sehingga
dapat dilanjutkan dengan melakukan percobaan kompilasi
dengan perintah “$gcc –o soal2 soal2.c”, maka akan terlihat
tampilan di bawah ini.
9. Kemudian dilakukan pengecekan pada folder “percobaan2”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal2”.
18
10. Kemudian “soal2” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal2”, seperti gambar
berikut.
11. Selanjutnya akan dilakukan kompilasi “soal2.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
18
10. Kemudian “soal2” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal2”, seperti gambar
berikut.
11. Selanjutnya akan dilakukan kompilasi “soal2.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
18
10. Kemudian “soal2” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal2”, seperti gambar
berikut.
11. Selanjutnya akan dilakukan kompilasi “soal2.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
19
12. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
13. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
19
12. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
13. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
19
12. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
13. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
20
14. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
15. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make2”. Dimana “make2” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
20
14. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
15. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make2”. Dimana “make2” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
20
14. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
15. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make2”. Dimana “make2” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
21
Setelah ketiga proses kompilasi selesai dilakukan, dan
dilakukan percobaan terhadap ketiga hasil kompilasi yang
dihasilkan. Terlihat bahwa ketiga file executable yang
dihasilkan melakukan operasi yang sama.
1.4.3. fork
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void ChildProcess();
void main ()
{
int pid, cid;
pid = getpid();
printf( "Fork demo! I am the parent (pid =
%d)\n",pid);
if (! fork())
{
cid = getpid();
21
Setelah ketiga proses kompilasi selesai dilakukan, dan
dilakukan percobaan terhadap ketiga hasil kompilasi yang
dihasilkan. Terlihat bahwa ketiga file executable yang
dihasilkan melakukan operasi yang sama.
1.4.3. fork
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void ChildProcess();
void main ()
{
int pid, cid;
pid = getpid();
printf( "Fork demo! I am the parent (pid =
%d)\n",pid);
if (! fork())
{
cid = getpid();
21
Setelah ketiga proses kompilasi selesai dilakukan, dan
dilakukan percobaan terhadap ketiga hasil kompilasi yang
dihasilkan. Terlihat bahwa ketiga file executable yang
dihasilkan melakukan operasi yang sama.
1.4.3. fork
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void ChildProcess();
void main ()
{
int pid, cid;
pid = getpid();
printf( "Fork demo! I am the parent (pid =
%d)\n",pid);
if (! fork())
{
cid = getpid();
22
printf("I am the child (cid=%d) of (pid =
%d)\n",cid,pid);
ChildProcess();
exit(0);
}
printf("Parent waiting here for the
child...\n");
wait(NULL);
printf("Child finished, parent quitting
too!\n");
}
void ChildProcess()
{
int i;
sleep(1);
for (i = 0; i < 10; i++)
{
printf("%d..\n",i);
sleep(1);
}
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan3”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal3.c”.
23
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan3” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan3 “ untuk masuk ke folder “percobaan3”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal3.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan3” . Kemudian
lalukan proses kompilasi pada kode program “soal3.c” dengan
perintah “$gcc soal3.c”, seperti gambar di bawah ini.
23
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan3” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan3 “ untuk masuk ke folder “percobaan3”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal3.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan3” . Kemudian
lalukan proses kompilasi pada kode program “soal3.c” dengan
perintah “$gcc soal3.c”, seperti gambar di bawah ini.
23
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan3” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan3 “ untuk masuk ke folder “percobaan3”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal3.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan3” . Kemudian
lalukan proses kompilasi pada kode program “soal3.c” dengan
perintah “$gcc soal3.c”, seperti gambar di bawah ini.
24
4. Dapat dilihat pada folder “percobaan3”, bahwa ada
perubahan yang terjadi, yaitu penambahan sebuah file
dengan nama “a.out” , dimana nama dari file tersebut secara
otomatis akan dibuat dan dengan ekstensi “.out”
5. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
24
4. Dapat dilihat pada folder “percobaan3”, bahwa ada
perubahan yang terjadi, yaitu penambahan sebuah file
dengan nama “a.out” , dimana nama dari file tersebut secara
otomatis akan dibuat dan dengan ekstensi “.out”
5. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
24
4. Dapat dilihat pada folder “percobaan3”, bahwa ada
perubahan yang terjadi, yaitu penambahan sebuah file
dengan nama “a.out” , dimana nama dari file tersebut secara
otomatis akan dibuat dan dengan ekstensi “.out”
5. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
25
6. Setelah itu dapat dilanjutkan dengan melakukan percobaan
kompilasi dengan perintah “$gcc –o soal3 soal3.c”, maka
akan terlihat tampilan di bawah ini.
7. Kemudian dilakukan pengecekan pada folder “percobaan3”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal3”.
25
6. Setelah itu dapat dilanjutkan dengan melakukan percobaan
kompilasi dengan perintah “$gcc –o soal3 soal3.c”, maka
akan terlihat tampilan di bawah ini.
7. Kemudian dilakukan pengecekan pada folder “percobaan3”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal3”.
25
6. Setelah itu dapat dilanjutkan dengan melakukan percobaan
kompilasi dengan perintah “$gcc –o soal3 soal3.c”, maka
akan terlihat tampilan di bawah ini.
7. Kemudian dilakukan pengecekan pada folder “percobaan3”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal3”.
26
8. Kemudian “soal3” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal3”, seperti gambar
berikut.
9. Selanjutnya akan dilakukan kompilasi “soal3.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
26
8. Kemudian “soal3” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal3”, seperti gambar
berikut.
9. Selanjutnya akan dilakukan kompilasi “soal3.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
26
8. Kemudian “soal3” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal3”, seperti gambar
berikut.
9. Selanjutnya akan dilakukan kompilasi “soal3.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
27
10. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
11. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
27
10. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
11. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
27
10. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
11. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
28
12. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
13. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make3”. Dimana “make3” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
28
12. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
13. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make3”. Dimana “make3” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
28
12. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
13. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make3”. Dimana “make3” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
29
Dari tiga percobaan kompilasi yang dilakukan, terlihat bahwa
setiap ouput percobaan menghasilkan hasil berbeda-beda, tapi
melakukan proses yang sama.
1.4.4. pipe.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int fd[2], nbytes;
pid_t childpid;
char string[] = "Hello, world!\n";
char readbuffer[80];
pipe(fd);
if((childpid = fork()) == -1)
{
perror("fork");
exit(1);
}
if(childpid == 0)
29
Dari tiga percobaan kompilasi yang dilakukan, terlihat bahwa
setiap ouput percobaan menghasilkan hasil berbeda-beda, tapi
melakukan proses yang sama.
1.4.4. pipe.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int fd[2], nbytes;
pid_t childpid;
char string[] = "Hello, world!\n";
char readbuffer[80];
pipe(fd);
if((childpid = fork()) == -1)
{
perror("fork");
exit(1);
}
if(childpid == 0)
29
Dari tiga percobaan kompilasi yang dilakukan, terlihat bahwa
setiap ouput percobaan menghasilkan hasil berbeda-beda, tapi
melakukan proses yang sama.
1.4.4. pipe.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int fd[2], nbytes;
pid_t childpid;
char string[] = "Hello, world!\n";
char readbuffer[80];
pipe(fd);
if((childpid = fork()) == -1)
{
perror("fork");
exit(1);
}
if(childpid == 0)
30
{
/* Child process closes up input side of
pipe */
close(fd[0]);
/* Send "string" through the output side of
pipe */
write(fd[1], string, strlen(string));
exit(0);
}
else
{
/* Parent process closes up output side of
pipe */
close(fd[1]);
/* Read in a string from the pipe */
nbytes = read(fd[0], readbuffer,
sizeof(readbuffer));
printf("Received string: %s", readbuffer);
}
return(0);
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan4”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal4.c”.
31
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan4” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan4 “ untuk masuk ke folder “percobaan4”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal4.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan4” . Kemudian
lalukan proses kompilasi pada kode program “soal4.c” dengan
perintah “$gcc soal4.c”, seperti gambar di bawah ini.
31
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan4” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan4 “ untuk masuk ke folder “percobaan4”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal4.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan4” . Kemudian
lalukan proses kompilasi pada kode program “soal4.c” dengan
perintah “$gcc soal4.c”, seperti gambar di bawah ini.
31
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan4” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan4 “ untuk masuk ke folder “percobaan4”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal4.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan4” . Kemudian
lalukan proses kompilasi pada kode program “soal4.c” dengan
perintah “$gcc soal4.c”, seperti gambar di bawah ini.
32
4. Karena pada program di atas ada peringatan error , maka
terlebih dahulu dilakukan perbaikan kode program agar bisa
dikompilasi. Error diatas dapat diatasi dengan
menambahkan library stdlib.h (menjabarkan beberapa
fungsi umum dan macro termasuk manajemen memori
dinamis, menjalin komunikasi dengan perangkat sekitar,
membuat bilangan secara random, aritmatika bilangan
integer, pencarian, pengurutan dan pengkonversian) dan
string.h (memanipulasi string dan array).
32
4. Karena pada program di atas ada peringatan error , maka
terlebih dahulu dilakukan perbaikan kode program agar bisa
dikompilasi. Error diatas dapat diatasi dengan
menambahkan library stdlib.h (menjabarkan beberapa
fungsi umum dan macro termasuk manajemen memori
dinamis, menjalin komunikasi dengan perangkat sekitar,
membuat bilangan secara random, aritmatika bilangan
integer, pencarian, pengurutan dan pengkonversian) dan
string.h (memanipulasi string dan array).
32
4. Karena pada program di atas ada peringatan error , maka
terlebih dahulu dilakukan perbaikan kode program agar bisa
dikompilasi. Error diatas dapat diatasi dengan
menambahkan library stdlib.h (menjabarkan beberapa
fungsi umum dan macro termasuk manajemen memori
dinamis, menjalin komunikasi dengan perangkat sekitar,
membuat bilangan secara random, aritmatika bilangan
integer, pencarian, pengurutan dan pengkonversian) dan
string.h (memanipulasi string dan array).
33
5. Setelah dilakukan perbaikan, maka dapat dilakukan
kompilasi ulang untuk mengecek ulang kode program yang
telah diperbaiki.
33
5. Setelah dilakukan perbaikan, maka dapat dilakukan
kompilasi ulang untuk mengecek ulang kode program yang
telah diperbaiki.
33
5. Setelah dilakukan perbaikan, maka dapat dilakukan
kompilasi ulang untuk mengecek ulang kode program yang
telah diperbaiki.
34
6. Pada perintah di atas, terlihat bahwa tidak ada peringatan
kesalahan pada program, maka terjadi perubahan pada
folder “percobaan4”, yaitu penambahan file “a.out”
7. Setelah dilakukan perbaikan, maka file “a.out” akan coba
dirun. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
8. Terlihat bahwa tidak terdapat peringatan lagi, sehingga
dapat dilanjutkan dengan melakukan percobaan kompilasi
34
6. Pada perintah di atas, terlihat bahwa tidak ada peringatan
kesalahan pada program, maka terjadi perubahan pada
folder “percobaan4”, yaitu penambahan file “a.out”
7. Setelah dilakukan perbaikan, maka file “a.out” akan coba
dirun. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
8. Terlihat bahwa tidak terdapat peringatan lagi, sehingga
dapat dilanjutkan dengan melakukan percobaan kompilasi
34
6. Pada perintah di atas, terlihat bahwa tidak ada peringatan
kesalahan pada program, maka terjadi perubahan pada
folder “percobaan4”, yaitu penambahan file “a.out”
7. Setelah dilakukan perbaikan, maka file “a.out” akan coba
dirun. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
8. Terlihat bahwa tidak terdapat peringatan lagi, sehingga
dapat dilanjutkan dengan melakukan percobaan kompilasi
35
dengan perintah “$gcc –o soal4 soal4.c”, maka akan terlihat
tampilan di bawah ini.
9. Kemudian dilakukan pengecekan pada folder “percobaan4”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal4”.
10. Kemudian “soal4” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal4”, seperti gambar
berikut.
35
dengan perintah “$gcc –o soal4 soal4.c”, maka akan terlihat
tampilan di bawah ini.
9. Kemudian dilakukan pengecekan pada folder “percobaan4”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal4”.
10. Kemudian “soal4” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal4”, seperti gambar
berikut.
35
dengan perintah “$gcc –o soal4 soal4.c”, maka akan terlihat
tampilan di bawah ini.
9. Kemudian dilakukan pengecekan pada folder “percobaan4”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal4”.
10. Kemudian “soal4” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal4”, seperti gambar
berikut.
36
11. Selanjutnya akan dilakukan kompilasi “soal4.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
12. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
36
11. Selanjutnya akan dilakukan kompilasi “soal4.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
12. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
36
11. Selanjutnya akan dilakukan kompilasi “soal4.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
12. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
37
13. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
14. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
37
13. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
14. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
37
13. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
14. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
38
15. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make4”. Dimana “make4” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
1.4.5. fork.c
#include <stdio.h>
#include <stdlib.h>
38
15. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make4”. Dimana “make4” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
1.4.5. fork.c
#include <stdio.h>
#include <stdlib.h>
38
15. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make4”. Dimana “make4” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
1.4.5. fork.c
#include <stdio.h>
#include <stdlib.h>
39
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
void main()
{
pid_t pid;
int rv;
switch(pid=fork()) {
case -1:
perror("fork"); /* something went wrong */
exit(1); /* parent exits */
case 0:
printf(" CHILD: This is the child
process!\n");
printf(" CHILD: My PID is %d\n", getpid());
printf(" CHILD: My parent's PID is %d\n",
getppid());
printf(" CHILD: Enter my exit status (make
it small): ");
scanf(" %d", &rv);
printf(" CHILD: I'm outta here!\n");
exit(rv);
default:
printf("PARENT: This is the parent
process!\n");
printf("PARENT: My PID is %d\n", getpid());
printf("PARENT: My child's PID is %d\n",
pid);
printf("PARENT: I'm now waiting for my child
to
40
exit()...\n");
wait(&rv);
printf("PARENT: My child's exit status is:
%d\n",
WEXITSTATUS(rv));
printf("PARENT: I'm outta here!\n");
}
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan5”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal5.c”.
40
exit()...\n");
wait(&rv);
printf("PARENT: My child's exit status is:
%d\n",
WEXITSTATUS(rv));
printf("PARENT: I'm outta here!\n");
}
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan5”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal5.c”.
40
exit()...\n");
wait(&rv);
printf("PARENT: My child's exit status is:
%d\n",
WEXITSTATUS(rv));
printf("PARENT: I'm outta here!\n");
}
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan5”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal5.c”.
41
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan5” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan5 “ untuk masuk ke folder “percobaan5”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal5.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan5” . Kemudian
lalukan proses kompilasi pada kode program “soal5.c” dengan
perintah “$gcc soal5.c”, seperti gambar di bawah ini.
4. Dapat dilihat pada folder “percobaan5”, bahwa ada
perubahan yang terjadi, yaitu penambahan sebuah file
dengan nama “a.out” , dimana nama dari file tersebut secara
otomatis akan dibuat dan dengan ekstensi “.out”
41
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan5” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan5 “ untuk masuk ke folder “percobaan5”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal5.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan5” . Kemudian
lalukan proses kompilasi pada kode program “soal5.c” dengan
perintah “$gcc soal5.c”, seperti gambar di bawah ini.
4. Dapat dilihat pada folder “percobaan5”, bahwa ada
perubahan yang terjadi, yaitu penambahan sebuah file
dengan nama “a.out” , dimana nama dari file tersebut secara
otomatis akan dibuat dan dengan ekstensi “.out”
41
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan5” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan5 “ untuk masuk ke folder “percobaan5”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal5.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan5” . Kemudian
lalukan proses kompilasi pada kode program “soal5.c” dengan
perintah “$gcc soal5.c”, seperti gambar di bawah ini.
4. Dapat dilihat pada folder “percobaan5”, bahwa ada
perubahan yang terjadi, yaitu penambahan sebuah file
dengan nama “a.out” , dimana nama dari file tersebut secara
otomatis akan dibuat dan dengan ekstensi “.out”
42
5. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
6. Setelah itu dapat dilanjutkan dengan melakukan percobaan
kompilasi dengan perintah “$gcc –o soal5 soal5.c”, maka
akan terlihat tampilan di bawah ini.
42
5. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
6. Setelah itu dapat dilanjutkan dengan melakukan percobaan
kompilasi dengan perintah “$gcc –o soal5 soal5.c”, maka
akan terlihat tampilan di bawah ini.
42
5. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
6. Setelah itu dapat dilanjutkan dengan melakukan percobaan
kompilasi dengan perintah “$gcc –o soal5 soal5.c”, maka
akan terlihat tampilan di bawah ini.
43
7. Kemudian dilakukan pengecekan pada folder “percobaan5”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal5”.
8. Kemudian “soal5” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal5”, seperti gambar
berikut.
43
7. Kemudian dilakukan pengecekan pada folder “percobaan5”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal5”.
8. Kemudian “soal5” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal5”, seperti gambar
berikut.
43
7. Kemudian dilakukan pengecekan pada folder “percobaan5”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal5”.
8. Kemudian “soal5” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal5”, seperti gambar
berikut.
44
9. Selanjutnya akan dilakukan kompilasi “soal5.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
10. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
44
9. Selanjutnya akan dilakukan kompilasi “soal5.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
10. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
44
9. Selanjutnya akan dilakukan kompilasi “soal5.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
10. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
45
11. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
12. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
45
11. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
12. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
45
11. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
12. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
46
13.Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make5”. Dimana “make5” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
Setelah ketiga proses kompilasi selesai dilakukan, dapat dilihat
bahwa ketiga file yang dihasilkan melakukan operasi yang
sama.
46
13.Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make5”. Dimana “make5” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
Setelah ketiga proses kompilasi selesai dilakukan, dapat dilihat
bahwa ketiga file yang dihasilkan melakukan operasi yang
sama.
46
13.Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make5”. Dimana “make5” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
Setelah ketiga proses kompilasi selesai dilakukan, dapat dilihat
bahwa ketiga file yang dihasilkan melakukan operasi yang
sama.
47
1.4.6. Signal.c
#include <stdio.h>
#include <signal.h>
void sighup(); /* routines child will call upon
sigtrap */
void sigint();
void sigquit();
void main()
{
int pid;
/* get child process */
if ((pid = fork()) < 0) {
perror("fork");
exit(1);
}
if (pid == 0){
/* child */
signal(SIGHUP,sighup); /* set function
calls */
signal(SIGINT,sigint);
signal(SIGQUIT, sigquit);
for(;;); /* loop for ever */
}
else {
/* parent */
/* pid hold id of child */
printf("\nPARENT: sending SIGHUP\n\n");
kill(pid,SIGHUP);
sleep(3); /* pause for 3 secs */
printf("\nPARENT: sending SIGINT\n\n");
kill(pid,SIGINT);
48
sleep(3); /* pause for 3 secs */
printf("\nPARENT: sending SIGQUIT\n\n");
kill(pid,SIGQUIT);
sleep(3);
}
}
void sighup() {
signal(SIGHUP,sighup); /* reset signal */
printf("CHILD: I have received a SIGHUP\n");
}
void sigint(){
signal(SIGINT,sigint); /* reset signal */
printf("CHILD: I have received a SIGINT\n");
}
void sigquit(){
printf("My DADDY has Killed me!!!\n");
exit(0);
}
Berikut langkah-langkah percobaan untuk program:
1. Buat sebuah folder misal dengan nama “percobaan6”.
Kemudian buatlah kode program di atas, dalam hal ini kami
memakai text editor Gedit untuk menulis kode program di atas.
Kode program di atas kami namakan “soal6.c”.
49
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan6” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan6 “ untuk masuk ke folder “percobaan6”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal6.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan6” . Kemudian
lalukan proses kompilasi pada kode program “soal6.c” dengan
perintah “$gcc soal6.c”, seperti gambar di bawah ini.
49
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan6” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan6 “ untuk masuk ke folder “percobaan6”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal6.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan6” . Kemudian
lalukan proses kompilasi pada kode program “soal6.c” dengan
perintah “$gcc soal6.c”, seperti gambar di bawah ini.
49
2. Lalu letakkan kode program yang telah dibuat ke dalam folder
“percobaan6” untuk melakukan pengamatan.
3. Setelah itu buka terminal, dan ketikkan perintah “ cd
Documents/percobaan6 “ untuk masuk ke folder “percobaan6”
yang terletak pada direktori ”Documents”, hal ini dilakukan
agar bisa mengkompilasi program “soal6.c” yang terletak di
folder tersebut. Jika perintah di atas sudah dijalankan maka
anda sudah berada pada folder “percobaan6” . Kemudian
lalukan proses kompilasi pada kode program “soal6.c” dengan
perintah “$gcc soal6.c”, seperti gambar di bawah ini.
50
4. Karena pada program di atas ada peringatan error , maka
terlebih dahulu dilakukan perbaikan kode program agar bisa
dikompilasi. Error diatas dapat diatasi dengan
menambahkan library stdlib.h (menjabarkan beberapa
fungsi umum dan macro termasuk manajemen memori
dinamis, menjalin komunikasi dengan perangkat sekitar,
membuat bilangan secara random, aritmatika bilangan
integer, pencarian, pengurutan dan pengkonversian) dan
errno.h (berfungsi untuk melaporkan kesalahan yang terjadi
melalui suatu kode kesalahan (error number)).
50
4. Karena pada program di atas ada peringatan error , maka
terlebih dahulu dilakukan perbaikan kode program agar bisa
dikompilasi. Error diatas dapat diatasi dengan
menambahkan library stdlib.h (menjabarkan beberapa
fungsi umum dan macro termasuk manajemen memori
dinamis, menjalin komunikasi dengan perangkat sekitar,
membuat bilangan secara random, aritmatika bilangan
integer, pencarian, pengurutan dan pengkonversian) dan
errno.h (berfungsi untuk melaporkan kesalahan yang terjadi
melalui suatu kode kesalahan (error number)).
50
4. Karena pada program di atas ada peringatan error , maka
terlebih dahulu dilakukan perbaikan kode program agar bisa
dikompilasi. Error diatas dapat diatasi dengan
menambahkan library stdlib.h (menjabarkan beberapa
fungsi umum dan macro termasuk manajemen memori
dinamis, menjalin komunikasi dengan perangkat sekitar,
membuat bilangan secara random, aritmatika bilangan
integer, pencarian, pengurutan dan pengkonversian) dan
errno.h (berfungsi untuk melaporkan kesalahan yang terjadi
melalui suatu kode kesalahan (error number)).
51
5. Setelah dilakukan perbaikan, maka dapat dilakukan
kompilasi ulang untuk mengecek ulang kode program yang
telah diperbaiki.
51
5. Setelah dilakukan perbaikan, maka dapat dilakukan
kompilasi ulang untuk mengecek ulang kode program yang
telah diperbaiki.
51
5. Setelah dilakukan perbaikan, maka dapat dilakukan
kompilasi ulang untuk mengecek ulang kode program yang
telah diperbaiki.
52
6. Pada perintah di atas, terlihat bahwa tidak ada peringatan
kesalahan pada program, maka terjadi perubahan pada
folder “percobaan6”, yaitu penambahan file “a.out”
7. Setelah dilakukan perbaikan, maka file “a.out” akan coba
dirun. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
52
6. Pada perintah di atas, terlihat bahwa tidak ada peringatan
kesalahan pada program, maka terjadi perubahan pada
folder “percobaan6”, yaitu penambahan file “a.out”
7. Setelah dilakukan perbaikan, maka file “a.out” akan coba
dirun. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
52
6. Pada perintah di atas, terlihat bahwa tidak ada peringatan
kesalahan pada program, maka terjadi perubahan pada
folder “percobaan6”, yaitu penambahan file “a.out”
7. Setelah dilakukan perbaikan, maka file “a.out” akan coba
dirun. Adapun perintah untuk menjalankan (mengerun) file
ekstensi “a.out” adalah dengan mengetikkan perintah
“./a.out”, seperti gambar beikut ini.
53
8. Terlihat bahwa tidak terdapat peringatan lagi, sehingga
dapat dilanjutkan dengan melakukan percobaan kompilasi
dengan perintah “$gcc –o soal6 soal6.c”, maka akan terlihat
tampilan di bawah ini.
9. Kemudian dilakukan pengecekan pada folder “percobaan6”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal6”.
10. Kemudian “soal6” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal6”, seperti gambar
berikut.
53
8. Terlihat bahwa tidak terdapat peringatan lagi, sehingga
dapat dilanjutkan dengan melakukan percobaan kompilasi
dengan perintah “$gcc –o soal6 soal6.c”, maka akan terlihat
tampilan di bawah ini.
9. Kemudian dilakukan pengecekan pada folder “percobaan6”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal6”.
10. Kemudian “soal6” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal6”, seperti gambar
berikut.
53
8. Terlihat bahwa tidak terdapat peringatan lagi, sehingga
dapat dilanjutkan dengan melakukan percobaan kompilasi
dengan perintah “$gcc –o soal6 soal6.c”, maka akan terlihat
tampilan di bawah ini.
9. Kemudian dilakukan pengecekan pada folder “percobaan6”,
terlihat seperti gambar di bawah ini bahwa ada penambahan
file “soal6”.
10. Kemudian “soal6” hasil dari kompilasi ini akan dijalankan
dengan menggunakan perintah “./soal6”, seperti gambar
berikut.
54
11. Selanjutnya akan dilakukan kompilasi “soal6.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
12. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
54
11. Selanjutnya akan dilakukan kompilasi “soal6.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
12. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
54
11. Selanjutnya akan dilakukan kompilasi “soal6.c” dengan
penggunakan perintah make. Untuk mengkopilasi dengan
make, maka harus dibuat 1 file dengan nama makefile.
12. Ketika perintah di atas dijalankan , maka akan dibuat 1 file
dengan nama makefile, kemudian tentukan aturan-aturan
dalam file itu.
55
13. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
14. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
55
13. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
14. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
55
13. Setelah selesai, simpan file yang telah dibuat. Kemudian
jalankan perintah make.
14. Setelah perintah “$make” dijalankan maka terjadi
penambahan file lagi dalam folder, seperti gambar di bawah
ini.
56
15. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make6”. Dimana “make6” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
Tidak ada operasi yang berbeda yang dilakukan oleh ketiga file
yang diujikan .
56
15. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make6”. Dimana “make6” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
Tidak ada operasi yang berbeda yang dilakukan oleh ketiga file
yang diujikan .
56
15. Terlihat bahwa ada penambahan file yaitu “makefile” dan
“make6”. Dimana “make6” adalah file yang mempunyai
ekstensi “.out”, sehingga ketika dijalankan maka akan
menampilkan output seperti di bawah ini.
Tidak ada operasi yang berbeda yang dilakukan oleh ketiga file
yang diujikan .
57
1.5 Kesimpulan dan Saran
1.5.1. Kesimpulan
Dari tugas pendahuluan yang telah kami kerjakan ,maka bisakami simpulkan :1) Sebuah program C dapat dibuat dengan berbagai aplikasi Text
Editor yang tersedia pada system operasi linux, misalnya geditnamun ekstensi dari file tersebut harus diakhiri dengan “.c”
2) Kompilasi dengan make memberikan kemudahan kepada pembuatprogram seperti mengotomatisasi kode sumber mana yang harusdikompilasi, bagaimana kode tersebut harus dikompilasi dankapan kode sumber harus dikompilasi.
3) Perintah yang berkaitan dengan Inter Process Comunicationseperti fork yang dapat digunakan untuk membuat sebuah proses(proses anak), wait yang digunakan untuk menunda eksekusiproses induk sampai proses anak dari induk tersebut selesaidieksekusi dari proses anak, dan signal yang digunakan untukmenunjukkan komunikasi yang terjadi antara parent dan child.
1.5.2. Saran
Adapun saran-saran ami untuk pelaksanaan praktikum adalah
sebagai berikut
1) Karena banyak istilah perintah yang masih baru seperti fork waitdan perintah di pipe lainnya. Agar dalam praktikum bisa sedikitdijelaskan untuk apa dan bagaimana fungsinya di dalam suatucompiler C.
2) Mohon juga agar dijelaskan bagaimanakah perintah-perintahseperti fork,wait dan perintah lainnya itu saling berhubungan,dikarenakan sumber yang kami dapat belum bisa menjawabpertanyaan kami.
1.6 Daftar Pustaka
1) Komunikasi Antar Proses, http://ikc.dinus.ac.id/umum/ibam/ibam-os-
html/x8712.html diakses pada 05 Juni 2013 pukul 20.00 WITA
2) Komunikasi Antar Proses (Inter-Process Communication),
http://adang.staff.gunadarma.ac.id/Downloads/files/4654/InterProses.pdf,
diakses pada 06 Juni 2013 pukul 07.00 WITA
58
3) 2013. Modul Praktikum Sistem Operasi .Jurusan Ilmu Komputer.
Universitas Udayana
LAMPIRAN
Lampiran 1
Berikut adalah lampiran revisi dari tugas pendahuluan Modul III Praktikum Sistem Operasi:
1. execl()
Fungsi execl() bisa digunakan untuk menjalankan dan menghentikan sebuah proses.
Fungsi ini berada dalam pustaka unistd.h. Bentuk umum fungsi ini adalah :
execl(char *path, char *arg0,…,char *argn, 0);
Dimana :
path adalah path dari sistem UNIX [baca FreeBSD] dari perintah yang akan diberikan.
arg0 adalah string yang mengacu pada path
arg1 sampai argn adalah argumen perintahnya
0 adalah NULL terminator yang merupakan argumen yang bertugas memberitahukan
kepada sistem C Programming bahwa tak ada lagi argumen yang di-list
Penggunaan * pada path dan argumen menandakan bahwa string yang diinputkan
pada fungsi ini ditampung dalam pointer
Berikut adalah contoh aplikasi fungsi execl() untuk menampilkan semua isi direktori
aktif dalam format panjang :
$edit test_execl.c
#include <stdio.h>
#include <unistd.h>
main(){
printf(“Files in Directory are:\n”);
execl(“/bin/ls”,”ls”,”-la”,0);}
Pada contoh di atas : /bin/ls adalah path, ls adalah arg0 dan 0 adalah Null terminator.
2. Fork
Perintah ini digunakan membuat sebuah proses. Proses baru yang dibuat oleh perintah
fork disebut proses anak. Nilai yang dikembalikan oleh perintah ini ada 2, yaitu pada
child return valuenya adalah 0, sedangkan pada parent return valuenya adalah process id
(pid) child. Hal ini dikarenakan sebuah proses dapat memiliki lebih dari satu child,
sehingga proses induk dapat mengakses proses anak dengan menggunakan pid tersebut.
Proses anak dapat mengerjakan semua perintah setelah perintah fork, dan proses induk
akan mengerjakan semua perintah pada program.
Sintaks penulisan perintah fork adalah sebagai berikut :
#include <unistd.h>
#include <sys/types.h>
int pid; /* process identifier */
pid = fork();
8
if ( pid < 0 ){
printf(Òerror : Cannot fork !!\Nó);
exit(1);
}
if ( pid == 0 ){
/*Child proses*/
}
else{
/* Parent process pid is child’s pid */}
Berikut adalah contoh penggunaan fork (fork.c):
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <errno.h>
4 #include <unistd.h>
5 #include <sys/types.h>
6 #include <sys/wait.h>
7
8 void main()
9 {
10 pid_t pid;
11 int rv;
12
13 switch(pid=fork()) {
14 case -1:
15 perror(“fork”); /* something went wrong */16 exit(1); /* parent exits */
17
18 case 0:
19 printf(“ CHILD: This is the child process!\n”);20 printf(“ CHILD: My PID is %d\n”, getpid());21 printf(“ CHILD: My parent’s PID is %d\n”, getppid());22 printf(“ CHILD: Enter my exit status (make it small): “);23 scanf(“ %d”, &rv);24 printf(“ CHILD: I’m outta here!\n”);25 exit(rv);
26
27 default:
28 printf(“PARENT: This is the parent process!\n”);29 printf(“PARENT: My PID is %d\n”, getpid());30 printf(“PARENT: My child’s PID is %d\n”, pid);31 printf(“PARENT: I’m now waiting for my child to
exit()...\n”);32 wait(&rv);
33 printf(“PARENT: My child’s exit status is: %d\n”,WEXITSTATUS(rv));
34 printf(“PARENT: I’m outta here!\n”);35 }
36 }
Proses child dimulai dari pemanggilan fungsi fork(). Semua statement setelah
pemanggilan fork() akan dieksekusi 2 kali, yang satu untuk proses induk dan yang satu
lagi untuk proses anak. Setiap pemanggilan fork akan membuat 1 proses anak. Statement
sebelum fork() hanya akan dieksekusi oleh proses induk.
3. Wait
Fungsi wait akan menunda eksekusi proses induk sampai proses anak dari induk
tersebut selesai dieksekusi keluar dari proses anak. Bentuk penulisannya:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait (int *status)
Parameter dari fungsi wait adalah pointer integer. Pemanggilan fungsi wait
menghasilkan nomor dari sesuatu yang terjadi, pertama dilakukan pengecekan apakah
proses induk memiliki beberapa proses anak. Jika tidak, maka nilai -1 akan dikembalikan
ke wait. Jika ya, maka pid dari child akan dikembalikan dan dipindah dari process table.
Tetapi jika proses induk memiliki proses anak tidak terbatas, maka proses induk ditunda
sampai menerima suatu sinyal dan sinyal tersebut akan diterima sesegera mungkin setelah
child mati.
4. Signal
Fungsi signal dalam IPC ini adalah agar menunjukkan bahwa antara parent
dan child terjadi komunikasi. Pemakaiannya adalah parent mengirimkan signal ke child
dengan perintah kill() sedangkan child menerima signal dari parent dengan perintah
signal().
Contoh pemakaiannya sebagai berikut (signal.c):
1 #include <stdio.h>
2 #include <signal.h>
3
4 void sighup(); /* routines child will call upon sigtrap */
5 void sigint();
6 void sigquit();
7
8 main()
9 {
10 int pid;
11 /* get child process */
12
13 if ((pid = fork()) < 0) {
14 perror(“fork”);15 exit(1);
16 }
17
18 if (pid == 0){
19 /* child */
20 signal(SIGHUP,sighup); /* set function calls */
21 signal(SIGINT,sigint);
22 signal(SIGQUIT, sigquit);
23 for(;;); /* loop for ever */
24 }
25 else {
26 /* parent */
27 /* pid hold id of child */
28 printf(“\Nparent: sending SIGHUP\n\n”);29 kill(pid,SIGHUP);
30 sleep(3); /* pause for 3 secs */
31 printf(“\Nparent: sending SIGINT\n\n”);32 kill(pid,SIGINT);
33 sleep(3); /* pause for 3 secs */
34 printf(“\Nparent: sending SIGQUIT\n\n”);35 kill(pid,SIGQUIT);
36 sleep(3);
37 }
38 }
39
40 void sighup() {
41 signal(SIGHUP,sighup); /* reset signal */
42 printf(“CHILD: I have received a SIGHUP\n”);43 }
44
45 void sigint(){
46 signal(SIGINT,sigint); /* reset signal */
47 printf(“CHILD: I have received a SIGINT\n”);48 }
49
50 void sigquit(){
51 printf(“My DADDY has Killed me!!!\n”);52 exit(0);
53 }
5. Pipes
Secara sederhana pipe adalah metode untuk menghubungkan standar output suatu
proses dengan standar input proses yang lain. Pipe ini merupakan metode komunikasi IPC
yang paling tua sepanjang perkembangan sistem operasi. Komunikasi yang disediakan
pipe adalah komunikasi dengan metode satu arah oleh karena itu disebut half duplex.
Fasilitas seperti ini sangat banyak digunakan ,bahkan diperintah-perintah baris (shell
command) seperti
$ls | sort | lp
Perintah diatas menentukan output dari perintah ls, menjadi input perintah sort, dan
output dari perintah sort akan menjadi input dari perintah lp. Data bergerak melalui half-
duplex pipe, dari kiri ke kanan.
Cara pembuatan pipe di C
Ada 2 cara untuk membuka pipe pada LINUX, yaitu pipe() dan popen() system call.
a. pipe()
SYSTEM CALL: pipe();
PROTOTYPE: int pipe( int fd[2] );
RETURNS: 0 on success
-1 on error:
errno = EMFILE (no free descriptors)
EMFILE (system file table is full)
EFAULT (fd array is not valid)
NOTES: fd[0] is set up for reading, fd[1] is set up for writing
pipe() menerima satu argumen array dengan jumlah 2 data bertipe integer. Jika proses
pemanggilan pipe berhasil, maka aarray tersebut akan mengantung 2 buah _le descriptor
yang digunakan untuk berkomunikasi. Data integer pertama pada array (elemen 0) dibuka
dan digunakan untuk membaca , dan elemen kedua (elemen 1) digunakan untuk menulis.
Secara sederhana , output dari fd1 akan menjadi input fd0. Data yang dikomunikasikan
antar proses tersebut akan melalui kernel. Pipe() mengembalikan 0 untuk sukses, -1 untuk
gagal dan mengeset errno langsung. Model standart pemrogramannya adalah setelah pipe
diset up, dua atau lebih kooperatif proses akan dibuat oleh fork() dan data akan
dilewatkan dengan menggunakan read() dan write(). Pipe dibuka dengan menggunakan
pipe(), dan harus ditutup dengan close(int fd).
b. popen()
FILE *popen(char *command, char *type)
Digunakan untuk membuka pipe untuk I/O dimana perintahnya adalah proses yang
akan dihubungkan pada proses pemanggil yang membuat pipe. Type bisa berupa “r”
untuk reading atau “w” untuk writing. Popen() mengembalikan stream pointer dan NULL
untuk sembarang error. Pipe yang dibuka oleh popen() harus selalu ditutup oleh
pclose(FILE *stream). Untuk berkomunikasi dengan stream pipe digunakan fprintf() dan
fscanf().
Contoh penggunaan pipe (pipe.c):
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <sys/types.h>
4
5 int main(void)
6 {
7 int fd[2], nbytes;
8 pid_t childpid;
9 char string[] = “Hello, world!\n”;10 char readbuffer[80];
11
12 pipe(fd);
13 if((childpid = fork()) == -1)
14 {
15 perror(“fork”);16 exit(1);
17 }
18
19 if(childpid == 0)
20 {
21 /* Child process closes up input side of pipe */
22 close(fd[0]);
23 /* Send “string” through the output side of pipe */
24 write(fd[1], string, strlen(string));
25 exit(0);
26 }
27 else
28 {
29 /* Parent process closes up output side of pipe */
30 close(fd[1]);
31 /* Read in a string from the pipe */
32 nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
33 printf(“Received string: %s”, readbuffer);34 }
35
36 return(0);
37 }
Lampiran 2
Berikut adalah penjelasan singkat beberapa program yang kami anggap terdapat
permasalahan.
1. Pada hasil percobaan kami output yang dihasilkan dari source code soal1.c dan soal2.c
memiliki output yang sama. Pada source code soal1.c menggunakan perintah system(“ls
–l”). ini merupakan perintah dari sistem sama seperti kita mengetikkan ls –l pada
terminal untuk menampilkan daftar file pada direktori. Sedangkan pada source code
soal2.c menggunakan perintah execl(“/bin/ls”,”ls”, “-l”,0) untuk mengeksekusi file ls
pada direktori /bin/ls. Sehingga outputnya akan sama dengan source code soal1.c.
Modul 3
Tugas Praktikum
IPC-Inter Process Communication
14 Juni 2013
Oleh :Kelompok 04
I Putu Agus Oka Gunawan (1108605020)I Gede Edy Maha Putra (1108605052)
Program Studi Teknik InformatikaJurusan Ilmu Komputer
Fakultas Matematika dan Ilmu Pengetahuan AlamUniversitas Udayana
2013
1
Daftar Isi
1 BAB 1 Permasalahan 3
2 BAB 2 Pembahasan 42.1 Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2
1 BAB 1 Permasalahan
Buat program dalam C yang dapat menjalankan proses seper-ti perintah ps yang menampilkan pid nama proses. Proses in-duk menciptakan proses anak di- mana proses anak tersebut akanmencatat proses-proses yang ada satu-p ersatu, dan mengemba-likan hasilnya ke proses induk. Setelah semua proses ditampilkanmaka proses anak akan mengakhiri tugasnya dan kemudian pro-ses induk mencetak hasil- nya ke layar. Komunikasi antar prosesmenggunakan pipe
3
2 BAB 2 Pembahasan
2.1 Source Code
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <stdlib.h>
#define BUFFERSIZE 100
main()
{
int fd[2];
pid_t childpid;
FILE *pipe_ps;
char readbuffer_child[BUFFERSIZE];
char readbuffer_parent[BUFFERSIZE];
pipe(fd);
if((childpid = fork()) == -1)
{
perror("fork");
exit(1);
}
if(childpid ==0)
{
close(fd[0]);
if((pipe_ps = popen("ps -aux", "r")) == NULL)
{
perror("popen");
exit(1);
}
while(fgets(readbuffer_child, 100, pipe_ps))
write(fd[1], readbuffer_child, BUFFERSIZE);
pclose(pipe_ps);
exit(0);
}
4
else
{
close(fd[1]);
while(read(fd[0], readbuffer_parent, BUFFERSIZE))
printf("%s", readbuffer_parent);
}
return(0);
}
2.2 Output
Berikut adalah output yang dihasilkan :
Gambar 1: Proses Kompilasi dan Run
5
Gambar 2: Hasil Running Program
6