laporan akhir modul 3 04

Post on 24-Oct-2015

29 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Sistem Operasi

TRANSCRIPT

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

top related