Lapres b b14

19
 LAPORAN RESMI MODUL 02 SISTEM OPERASI 2013/2014 KELOMPOK B14 : 512100212 Ot niel Y ehezkiel 5113108703 Paskalina Arimua  JURUSAN TEKNIK INFORMA TIKA FAKULTAS TEKNOLOGI INFORMASI INSTITUT TEKNOLOGI SEPULUH NOPEMBER SURABAYA 2013

description

SISOP

Transcript of Lapres b b14

  • LAPORAN RESMIMODUL 02

    SISTEM OPERASI 2013/2014

    KELOMPOK B14 :512100212 Otniel Yehezkiel

    5113108703 Paskalina Arimua

    JURUSAN TEKNIK INFORMATIKAFAKULTAS TEKNOLOGI INFORMASI

    INSTITUT TEKNOLOGI SEPULUH NOPEMBERSURABAYA

    2013

  • SOAL PENDAHULUAN MODUL II SISTEM OPERASI 2013 1. Cak Pur adalah pedagang pentol favorit yang biasa berdagang

    disekitaran kampus ITS. Setiap hari, dagangannya laris dilahap olehribuan mahasiswa. Pada suatu ketika, Surya yang selaku koordinatorkonsumsi REEVA ingin memesan dagangannya cak Pur untukdijualkana ke ribuan pengunjung nantinya. Dikarenakan cak Pur ialahorang yang lulusan SD sehingga mepunyai kelemahan dalam dayaingatnya alias peupa. Sebagai salah satu pelanggan setianya, bantucak Pur dalam membuat suatu program reminder dengan spesifikasisebagai berikut:a. Program yang dapat memberikan peringatan berupa audio pukul04.00 agar terbangun untuk membeli dagangannya di Pasarb. Membuat peringatan berupa tulisan untuk mengingatkan beliauharus tiba di lokasi REEVA pukul 17:00.

    2. Evan Dimas adalah pemain timnas U-19. PSSI menyatakan status EvanDimas sebagai pemain ilegal. Karena jengkel, Evan Dimas berniatmengerjai server PSSI. Evan Dimas ingin membuat virus, dimanasetiap kelipatan menit ganjil, virus merubah semua nama file yang adadi home directory PSSI menjadi PSSI_LAKNAT dan setiap kelipatanmenit genap, virus tersebut merubah semua nama file di homedirectory PSSI menjadi PSSI_BERTAUBATLAH. Setiap kali virus ituberjalan, virus itu akan mencatat aktivitas erubah name file yang ialakukan ke dalam sebuah file log yang hanya bisa dibaca oleh EvanDimas saja. Bantulah Evan Dimas membuat virus tersebut!

    3. Rangga dan Cinta ternyata takut dengan teguran dari Bahrul.Keduanya berjanji untuk tidak bermain game lagi di jam aktif kuliah.Dari situlah Cinta dan Rangga ingin membuat sebuah messengersendiri yang bisa dipakai untuk saling mengingatkan Keduanya inginMessanger ini memiliki status Vailable dan usy agar tidak menggangguketika salah satunya sedang tidak mau diganggu. Ketika Rangga dalamstatus Busy dan Cinta mengirimkan pesan, Rangga tidak akanmenerima pesan dar Cinta ini, selama statusnya masih Busy. Tapipesan ini akan langsung muncul ketika Rangga mengubah statusnyamenjadi Available. Bantulah mereka dalam menyelesaikan programMessenger sesuai dengan keinginan mereka.

  • 4. Diam diam rangga berencana membuat sebuah game sederhanatentang kapal untuk mendekatkan diri dengan Bahrul. Rangga tahuanda adalah orang yang ahli dalam pratikum Sistem Operasi danberpikir Logis. Ranggapun memberikan tantangan kepada anda untukmemahami dan membuat game yang dimaksudnya sesuai dengangambaran dibawah ini:

  • JAWABAN1. a. Code no1.c-nya:#include #include #include #include #include #include #include #include #include #include

    int main(){ pid_t pid=0, sid; int hour,minute;

    pid = fork(); if(pid < 0){ printf("fork failed!\n"); return 1; } if(pid > 0){

    } umask(0); sid = setsid(); if(sid < 0){ return 1; } chdir("/home/otniel"); close(STDIN_FILENO); close(STDOUT_FILENO);

  • close(STDERR_FILENO); while(1) { time_t waktu; struct tm *loctime; time(&waktu); loctime=localtime(&waktu); hour=loctime->tm_hour; minute=loctime->tm_min; int second=loctime->tm_sec; if(hour==4 && minute==0 && second==0) { popen("play /home/otniel/Dream_Theater_Metropolis.mp3","r");

    sleep(1); } } return 0;}b. Sama seperti code yang diatas, tinggal menambahkan fungsi IF saat jam17.00 kedalam while(1) code. if(hour==19 && minute==52 && second==0){ popen("bash /home/otniel/Shift2/x1/zenity.sh","r");

    sleep(1); }Ketika pukul 17.00 maka dia akan membuat peringatan dengan zenity.shpada direktori diatas, berikut code zenity.sh-nya:#!bin/bash zenity --title "Warning" --info --text="Anda harus tiba dilokasiREEVA sekarang!!"

  • Screenshoot:

    Ketika daemon dijalankan:

  • 2. Code no2.c-nya:#include #include #include #include #include #include

    int main(){ char array[100][100]; char str[100],temp[100]; DIR *dp; struct dirent *ep; FILE *log; pid_t pid=0,sid; time_t waktu; struct tm *loctime; int i, j, k, a, b, menit;

    //Buat Demon pid = fork(); if(pid < 0){ printf("fork failed!\n"); return 1; } if(pid > 0){ return 0; } umask(0); sid = setsid(); if(sid < 0){ return 1; }

  • chdir("/home/otniel/PSSI"); close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO);

    //buat file log log = fopen("/home/otniel/log","w+"); //ganti owner dan file permission chown("/home/otniel/log",getuid(),getgid()); chmod("/home/otniel/log", 0660);

    while(1){ //membuka direktori dp = opendir ("/home/otniel/PSSI"); if(dp < 0){ printf("Tidak bisa membuka direktori!\n"); return 1; }

    //mengambil waktu (localtime) sekarang time(&waktu); loctime = localtime(&waktu); menit = loctime->tm_min;

    i = 0;

    //mencatat nama2 file yang ada di dp ke dalam array while (ep = readdir (dp)){ if(ep->d_type == DT_REG && ep->d_name[0]!='.'){ //copy nama file ke array strcpy(array[i++],ep->d_name); } }

  • closedir(dp); //Poses mengubah nama file dalam menit tertentu

    for(j=0; jtm_hour,loctime->tm_min,array[j],str); fflush(log); } } sleep(60); } return 0; }Screenshot Penggunaannya:

  • Log File dan Direktori PSSI

    3. Code no 3 ada dua, secara keseluruhan codenya sama kecuali padabagian penomoran send.mtype dan receive.mtype untuk membuat 2 clientbisa melakukan chatting. #include #include #include #include #include #include

    #define SIZE 256

    typedef struct{ long mtype; char mtext[SIZE];

    }msg_s;

  • int main(){ int msqid; int msgflg = IPC_CREAT | 0666; bool busy = false; pid_t pid; key_t key; msg_s send,receive;

    send.mtype = 2; receive.mtype = 1;

    key = 1234;

    if(msqid = msgget(key, msgflg) < 0){ printf("Tidak dapat membuat message queue\n");

    }

    pid = fork();

    while(1){ if(pid > 0) //parent untuk pengirman {

    gets(send.mtext); if(strcmp(send.mtext, "/busy") == 0){

    if(!busy){ kill(pid,9); //child process busy = true; continue;

    } } else if(strcmp(send.mtext, "/on") == 0){

    if(busy){ pid = fork(); //bikin child process baru

  • busy = false; continue;

    } } msgsnd(msqid, &send, strlen(send.mtext)+1,

    IPC_NOWAIT); } else //child -- utk nerima {

    msgrcv(msqid, &receive, SIZE, receive.mtype,MSG_NOERROR);

    printf("%s\n",receive.mtext); }

    }

    return 0; }Pada code satu lagi, hanya diganti pada .mtypenya saja dibalik:

    send.mtype = 1; receive.mtype = 2;

  • Screenshot Penggunaannya:Buka 2 terminal, lalu jalankan masing2 codenya. Apabila user menulis /bussymaka lawan chatnya tidak dapat mengirim chat ke pada user tersebut. Jikauser menulis /on maka chat kembali normal, dan menampilkan apa yangditulis lawan chatnya saat user tersebut /busy

    4. Ada 2 code yang saya buat. Menggunakan metode pipeline, menyimpandata/informasi kedalam suatu file untuk diproses. Code pertama adalahsebagai server.c:#include #include #include #include #include #include

    #define FIFO "DATAGAME"#define FIFO_CHECK "SKOR"

    int main(){

    FILE *file, *score;

  • char pemain1, pemain2, tmp, cmd1[4], cmd2[4];int i,menang1,menang2,ulangi;

    while(1){

    menang1=0;menang2=0;ulangi=0;umask(0);mknod(FIFO, S_IFIFO|0666, 0);mknod(FIFO_CHECK, S_IFIFO|0666, 0);

    pemain1='\0';pemain2='\0';strcpy(cmd1,"");strcpy(cmd2,"");

    score=fopen(FIFO_CHECK,"w");fprintf(score,"0");fclose(score);

    file=fopen(FIFO,"w");fprintf(file,"");fclose(file);

    while(1){

    file=fopen(FIFO,"r");fscanf(file,"%c%c",&pemain1,&tmp);if (pemain1>=65 && pemain1

  • fclose(file);}

    fgets(cmd1,5,file);printf("%c%c%s\n",pemain1,tmp,cmd1);fscanf(file,"%c",&pemain2);fclose(file);while(1){

    file=fopen(FIFO,"r");fscanf(file,"%c%c",&pemain2,&tmp);if (pemain2!=pemain1) {

    break;}fclose(file);

    }fgets(cmd2,5,file);printf("%c%c%s\n",pemain2,tmp,cmd2);

    for (i=0;i

  • score=fopen(FIFO_CHECK,"w");if (menang1==menang2) {fprintf(score,"2");

    fprintf(score,"Permainan Berimbang\n"); ulangi=1;}else if (menang1>menang2) {fprintf(score,"1");

    fprintf(score,"Pemain %c menang\n",pemain1);}else {fprintf(score,"1"); fprintf(score,"Pemain %c

    menang\n",pemain2);}fclose(score);fclose(file);if (ulangi!=1) {printf("end\n"); break;}printf("Ulangi!! :D\n");

    }return 0;

    }Jadi server yang menentukan siapa pemenangnya berdasarkandata/informasi yang ada dalam file pipeline tersebut. Berikut adalah codeuser yang akan menjalankan permainan.c:#include #include #include int main(){

    FILE *file, *score;char pemain,tmp;char pemain2[2],cmd[4], hasil[20];int score_avail, replay;

    while(1){

    score_avail=0;replay=0;

  • if ((file=fopen("DATAGAME","w"))==NULL){

    printf("File tidak ada\n");exit(1);

    }

    scanf("%c%c",&pemain,&tmp);scanf("%c%c%c",&cmd[0],&cmd[1],&tmp);scanf("%c%c%c",&cmd[2],&cmd[3],&tmp);

    fprintf(file,"%c ",pemain);fputs(cmd,file);fprintf(file,"\n");fclose(file);

    while(1){

    score=fopen("SKOR","r");fscanf(score,"%d",&score_avail);if (score_avail==1){

    fgets(hasil,20,score);printf("%s\n",hasil);fclose(score);break;

    }else if (score_avail==2) {

    fgets(hasil,20,score);printf("%s\n",hasil);replay=1;fclose(score);break;

    }

  • fclose(score);}if (replay!=1) break;

    }return 0;

    }

    Screenshoot penggunaan:Buka 3 terminal, yang pertama jalankan server.c, 2 terminal lagi jalankanpermainan.c. Pada masing masing terminal permainan.c input nama danposisi kapal perangnya masing2.

  • Jika permainan berimbang: