Skip to content
This repository was archived by the owner on Nov 3, 2021. It is now read-only.

jundi77/soal-shift-sisop-modul-2-C03-2021

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Penjelasan Soal Shift SISOP Modul 2

Anggota Kelompok

  1. Ega Prabu Pamungkas (05111940000014)
  2. A. Zidan Abdillah Majid (05111940000070)
  3. Jundullah Hanif Robbani (05111940000144)

Soal 1

a. Dalam soal a, kami menggunakan fork pada setiap variabel qid. Kemudian Untuk membuat folder Musyik, Fylm, dan Pyoto kami menggunakan mkdir dan fungsi execv untuk menjalankannya.

Screenshot (1726)

b. Dalam soal b, kami menggunakan variabel step dan menggunakan fungsi wait untuk menunggu child process selesai melakukan tugasnya, yaitu membuat folder. Kami juga menggunakan tetap fork pada setiap variabel qid. Kemudian Untuk mendownload folder Musyik, Fylm, dan Pyoto kami menggunakan wget dengan link yang sudah tersedia pada soal dan fungsi execv untuk menjalankannya.

Screenshot (1727)

c. Untuk mengekstrak folder zip pada soal b kami menggunakan unzip dan fungsi execv untuk menjalankannya. Di sini kami step dan menggunakan fungsi wait untuk menunggu child process selesai melakukan tugasnya. Kami juga menggunakan fork pada setiap variabel qid.

Screenshot (1728)

d. Pada soal d, kami memindahkan file yang sebelumnya telah didownload dan diekstrak menuju folder tujuan yang telah dibuat dengan menggunakan cp dan fungsi execv untuk menjalankannya.

Screenshot (1729)

e. Perintah soal e adalah agar semua hal di atas berjalan otomatis 6 jam sebelum waktu ulang tahun Stevany. Dalam code kami mengatur tanggal 9 April pada pukul 16:22:0.

if(t->tm_mon==3 && t->tm_mday==9 && t->tm_hour==16 && t->tm_min==22 && t->tm_sec==0)

Selanjutnya pada terminal linux dengan menjalankan sudo date --set="2021-04-09 16:22:00".

VirtualBox_Ubuntu_25_04_2021_20_30_27

f. Terakhir, setelah tiba pada waktu ulang tahunnya Stevany, semua folder akan di-zip dengan nama Lopyu_Stevany.zip dan semua folder akan di-delete (sehingga hanya menyisakan .zip). Di sini kami mengatur waktu dengan menjalankan sudo date --set="2021-04-09 16:22:00". Untuk melakukan zip pada folder maka digunakan zip dan fungsi execv untuk menjalankannya. Dan, untuk men-delete folder kami menggunakan rm.

Screenshot (1730)

VirtualBox_Ubuntu_25_04_2021_20_36_06

Kendala saat mengerjakan

Sempat terkendala dalam mengatur waktu dalam terminal linux. Walaupun saya sudah menggunakan sudo date --set="2021-04-09 16:22:00" pada terminal linux tapi belum bisa berjalan. Jadi, folder-folder belum bisa terdownload. Kemudian, saya mengatur setting time-nya langsung pada sistem linux dengan mengubah waktu menjadi 16:22 dan tanggal menjadi 9 April. Setelah saya melakukan ini baru kemudian sudo date --set="2021-04-09 16:22:00" pada terminal linux bisa berjalan dan folder-folder yang diinginkan bisa muncul.

Soal 2

Alur program yang dirancang untuk nomor 2 sebagai jawaban kami adalah:

  1. Membuat folder modul2 di $HOME, menggunakan mkdir, lalu chdir ke folder modul2.
  2. unzip pets.zip ke folder modul2.
  3. Hapus folder yang tidak diperlukan di folder modul2 (hasil ekstrak pets.zip), , listing folder menggunakan find dengan argumen -d, dan penghapusan menggunakan rm dengan argumen -rf.
  4. Membuat folder petshop di dalam folder modul2 menggunakan mkdir.
  5. Menyimpan list nama-nama file yang akan dipindah, listing file menggunakan find dengan argumen -f.
  6. Nama file diparsing menggunakan strtok:
    1. Yang pertama adalah pemisahan string dengan karakter _ yang menandakan terdapat hewan yang berbeda di dalam gambar, sebab file perlu disalin sebanyak banyak hewan yang ada di gambar.
    2. Untuk setiap string data hewan, lakukan:
      1. Pemisahan data-data string dengan karakter ;, kemudian ambil data jenis, nama, dan umur hewan.
      2. Membuat folder jenis peliharaan di dalam folder petshop.
      3. Menambahkan nama dan umur peliharaan ke file keterangan.txt di dalam folder jenis peliharaan.
      4. Menyalin file gambar ke dalam folder jenis peliharaan dengan penamaan baru menggunakan cp.
    3. Hapus file gambar menggunakan rm.
  7. Program selesai.

Dalam pengerjaan, find digunakan untuk listing direktori ketimbang ls disebabkan adanya error yang sulit dicari penyebabnya saat menggunakan ls. Untuk transfer data hasil output child ke parent, misal dalam transfer output find, digunakan fungsi pipe untuk menyambungkan antara child dan parent, lalu digunakan dup2 untuk mengalihkan output ke pipe.

image
Program sedang berjalan, mkdir terlihat mengeluarkan pesan bahwa folder jenis hewan telah dibuat

Saat pengerjaan, debugging menggunakan visual studio code tidak memberikan cara debug child-child proses yang berjalan, sehingga memberikan tantangan tersendiri untuk debugging bug dan error yang ada.

debugging dengan vscode
Debugging menggunakan vscode

Soal 3

Pada soal ini terdapat 5 permasalahan yang perlu dikerjakan. Sebelum itu, soal nomor 3 ini harus dikerjakan dengan mengubah proses menjadi daemon terlebih dahulu karena program ini akan dikerjakan menggunakan 2 metode dimana program akan berjalan di latar belakang.

  1. Membuat direktori dengan nama waktu saat itu juga [tahun-bulan-tanggal_jam:menit:detik] dengan selang 40 detik.

    Waktu saat membuat direktori dapat diambil dengan menggunakan library **time.h**. Setelah itu, dapat membuat direktori dengan membuat sub-proses terlebih dahulu dan menggunakan execv untuk memanggil mkdir. Program utama lalu melakukan sleep(40) agar directory selanjutnya dibuat tepat 40 detik setelahnya.

    mkdir

  2. Mendownload 10 gambar di https://picsum.photos/ dengan bentuk foto persegi dan ukurannya **(n%1000)+50** dimana n adalah waktu Epoch Unix dalam detik saat itu dengan selang 5 detik.

    Untuk membuat bentuk foto persegi cukup menambahkan satu bilangan setelah url sesuai dengan petunjuk di website tersebut. Mengambil waktu Epoch Unix dalam detik dapat menggunakan library **time.h** seperti pada gambar di bawah. Looping untuk mendownload juga dapat dilakukan menggunakan lopping biasa dan memanggil sub-proses di dalam looping tersebut. Mendownload juga dilakukan dengan execv memanggil wget dengan option -O (nama_file) dimana nama filenya [tahun-bulan-tanggal_jam:menit:detik] saat mendownload gambar tersebut, nama itu juga dapat dibuat dengan cara yang sama seperti nomor 1. Sebelum loop berlanjut, dilakukan sleep(5) agar foto yang didownload akan tepat 5 detik setelah foto sebelumnya terdownload.

    loop

  3. Membuat file status.txt berisi kalimat Download Success lalu dilakukan Caesar Chiper +5. Yang terakhir meletakkan folder tersebut di sebuah zip dan menghapus folder sehingga yang tersisa tinggal file zip.

    Untuk membuat file status.txt memakai tipe data FILE lalu fopen dengan opsi w+ untuk membuat file baru dan menuliskan ke file baru tersebut. Caesar cipher dapat dilakukan dengan menggunakan kode seperti gambar dibawah. Setelah dienkripsi, dapat dituliskan ke dalam file menggunakan fputs dan jangan lupa di-close dengan fclose. Untuk melakukan kompress zip dengan membuat sub-proses execv dan zip lalu menghapus folder dengan execv dan rm -r.

    ![caesar_cipher](https://user-images.githubusercontent.com/68368240/115980426-dfa9a500-a5b6-11eb-85d4-0610b35aebdb.png "Caesar Cipher)

    status

    zip

    rm

  4. Membuat program Killer untuk mematikan program yang berjalan di latar belakang.

  5. Membuat program berjalan dua mode -z atau -x dimana -z membuat program Killer untuk mematikan seluruh proses sekaligus, sedangkan -x membuat program Killer menunggu hasil download selesai terlebih dahulu lalu dimatikan prosesnya.

    Membuat program Killer dilakukan dengan menggunakn FILE sama seperti membuat status.txt. Untuk program Killer -z dilakukan dengan memanfaatkan killall dan dilanjuti nama program yang berjalan, untuk kasus ini adalah soal3. Sedangkan -x dapat dilakukan dengan memanggil kill -9 lalu diikuti pid dari proses yang didapat dengan memanggil getpid(). Untuk pembuatan Killer dilakukan sebelum proses utama berjalan.

    mode

    mode2

    make_killer

Kendala saat mengerjakan

Sempat tidak berjalan execv untuk memanggil wget dimana file yang terdownload tidak lengkap. Menduga karena semua STD ditutup makanya mengalihkan STD ke /dev/null dengan menggunakan fd dan dup2, dengan begitu program utama dapat berjalan dengan lancar.

fd

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages