laporan akhir modul 3 04

78
LA PR NIM / Nama Asisten Prakti Pembimbing PROGRA JURUS U APORAN MODUL 3 RAKTIKUM SISTEM OPERASI Kelompok 04 : I Made Agus Oka Gunawan I Gede Edy Mahaputra ikum : I Gede Wira Kusuma Jaya : I Made Agus Setiawan, M.Kom, M AM STUDI TEKNIK INFORMA SAN ILMU KOMPUTER FMI UNIVERSITAS UDAYANA Bukit Jimbaran 2013 3 1108605020 1108605052 1008605019 M.Sc ATIKA IPA

Upload: putridiyani

Post on 24-Oct-2015

29 views

Category:

Documents


0 download

DESCRIPTION

Sistem Operasi

TRANSCRIPT

Page 1: Laporan Akhir Modul 3 04

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

Page 2: Laporan Akhir Modul 3 04

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

Page 3: Laporan Akhir Modul 3 04

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

Page 4: Laporan Akhir Modul 3 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

Page 5: Laporan Akhir Modul 3 04

v

MODUL III

Page 6: Laporan Akhir Modul 3 04

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

Page 7: Laporan Akhir Modul 3 04

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())

Page 8: Laporan Akhir Modul 3 04

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){

Page 9: Laporan Akhir Modul 3 04

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): ");

Page 10: Laporan Akhir Modul 3 04

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 */

Page 11: Laporan Akhir Modul 3 04

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");

Page 12: Laporan Akhir Modul 3 04

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.

Page 13: Laporan Akhir Modul 3 04

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.

Page 14: Laporan Akhir Modul 3 04

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”.

Page 15: Laporan Akhir Modul 3 04

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.

Page 16: Laporan Akhir Modul 3 04

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.

Page 17: Laporan Akhir Modul 3 04

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.

Page 18: Laporan Akhir Modul 3 04

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”.

Page 19: Laporan Akhir Modul 3 04

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.

Page 20: Laporan Akhir Modul 3 04

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);

Page 21: Laporan Akhir Modul 3 04

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.

Page 22: Laporan Akhir Modul 3 04

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”.

Page 23: Laporan Akhir Modul 3 04

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.

Page 24: Laporan Akhir Modul 3 04

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.

Page 25: Laporan Akhir Modul 3 04

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.

Page 26: Laporan Akhir Modul 3 04

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();

Page 27: Laporan Akhir Modul 3 04

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”.

Page 28: Laporan Akhir Modul 3 04

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.

Page 29: Laporan Akhir Modul 3 04

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.

Page 30: Laporan Akhir Modul 3 04

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”.

Page 31: Laporan Akhir Modul 3 04

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.

Page 32: Laporan Akhir Modul 3 04

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.

Page 33: Laporan Akhir Modul 3 04

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.

Page 34: Laporan Akhir Modul 3 04

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)

Page 35: Laporan Akhir Modul 3 04

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”.

Page 36: Laporan Akhir Modul 3 04

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.

Page 37: Laporan Akhir Modul 3 04

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).

Page 38: Laporan Akhir Modul 3 04

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.

Page 39: Laporan Akhir Modul 3 04

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

Page 40: Laporan Akhir Modul 3 04

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.

Page 41: Laporan Akhir Modul 3 04

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.

Page 42: Laporan Akhir Modul 3 04

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.

Page 43: Laporan Akhir Modul 3 04

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>

Page 44: Laporan Akhir Modul 3 04

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

Page 45: Laporan Akhir Modul 3 04

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”.

Page 46: Laporan Akhir Modul 3 04

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”

Page 47: Laporan Akhir Modul 3 04

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.

Page 48: Laporan Akhir Modul 3 04

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.

Page 49: Laporan Akhir Modul 3 04

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.

Page 50: Laporan Akhir Modul 3 04

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.

Page 51: Laporan Akhir Modul 3 04

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.

Page 52: Laporan Akhir Modul 3 04

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);

Page 53: Laporan Akhir Modul 3 04

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”.

Page 54: Laporan Akhir Modul 3 04

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.

Page 55: Laporan Akhir Modul 3 04

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)).

Page 56: Laporan Akhir Modul 3 04

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.

Page 57: Laporan Akhir Modul 3 04

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.

Page 58: Laporan Akhir Modul 3 04

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.

Page 59: Laporan Akhir Modul 3 04

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.

Page 60: Laporan Akhir Modul 3 04

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.

Page 61: Laporan Akhir Modul 3 04

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 .

Page 62: Laporan Akhir Modul 3 04

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

Page 63: Laporan Akhir Modul 3 04

58

3) 2013. Modul Praktikum Sistem Operasi .Jurusan Ilmu Komputer.

Universitas Udayana

Page 64: Laporan Akhir Modul 3 04

LAMPIRAN

Page 65: Laporan Akhir Modul 3 04

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

Page 66: Laporan Akhir Modul 3 04

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:

Page 67: Laporan Akhir Modul 3 04

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)

Page 68: Laporan Akhir Modul 3 04

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 */

Page 69: Laporan Akhir Modul 3 04

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

Page 70: Laporan Akhir Modul 3 04

$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

Page 71: Laporan Akhir Modul 3 04

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 }

Page 72: Laporan Akhir Modul 3 04

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.

Page 73: Laporan Akhir Modul 3 04

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

Page 74: Laporan Akhir Modul 3 04

Daftar Isi

1 BAB 1 Permasalahan 3

2 BAB 2 Pembahasan 42.1 Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2

Page 75: Laporan Akhir Modul 3 04

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

Page 76: Laporan Akhir Modul 3 04

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

Page 77: Laporan Akhir Modul 3 04

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

Page 78: Laporan Akhir Modul 3 04

Gambar 2: Hasil Running Program

6