- Ega Prabu Pamungkas (05111940000014)
- A. Zidan Abdillah Majid (05111940000070)
- Jundullah Hanif Robbani (05111940000144)
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.
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.
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
.
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.
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"
.
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
.
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.
Alur program yang dirancang untuk nomor 2 sebagai jawaban kami adalah:
- Membuat folder
modul2
di$HOME
, menggunakanmkdir
, laluchdir
ke folder modul2. unzip
pets.zip
ke foldermodul2
.- Hapus folder yang tidak diperlukan di folder
modul2
(hasil ekstrakpets.zip
), , listing folder menggunakanfind
dengan argumen-d
, dan penghapusan menggunakanrm
dengan argumen-rf
. - Membuat folder
petshop
di dalam foldermodul2
menggunakanmkdir
. - Menyimpan list nama-nama file yang akan dipindah, listing file menggunakan
find
dengan argumen-f
. - Nama file diparsing menggunakan
strtok
:- 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. - Untuk setiap string data hewan, lakukan:
- Pemisahan data-data string dengan karakter
;
, kemudian ambil data jenis, nama, dan umur hewan. - Membuat folder jenis peliharaan di dalam folder
petshop
. - Menambahkan nama dan umur peliharaan ke file
keterangan.txt
di dalam folder jenis peliharaan. - Menyalin file gambar ke dalam folder jenis peliharaan dengan penamaan baru menggunakan
cp
.
- Pemisahan data-data string dengan karakter
- Hapus file gambar menggunakan
rm
.
- Yang pertama adalah pemisahan string dengan karakter
- 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
.
![]() |
---|
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 menggunakan vscode |
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.
-
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 menggunakanexecv
untuk memanggilmkdir
. Program utama lalu melakukansleep(40)
agar directory selanjutnya dibuat tepat 40 detik setelahnya. -
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 denganexecv
memanggilwget
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, dilakukansleep(5)
agar foto yang didownload akan tepat 5 detik setelah foto sebelumnya terdownload. -
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
lalufopen
dengan opsiw+
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 menggunakanfputs
dan jangan lupa di-close denganfclose
. Untuk melakukan kompress zip dengan membuat sub-prosesexecv
danzip
lalu menghapus folder denganexecv
danrm -r
.
-
Membuat program Killer untuk mematikan program yang berjalan di latar belakang.
-
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 memanfaatkankillall
dan dilanjuti nama program yang berjalan, untuk kasus ini adalahsoal3
. Sedangkan-x
dapat dilakukan dengan memanggilkill -9
lalu diikuti pid dari proses yang didapat dengan memanggilgetpid()
. Untuk pembuatan Killer dilakukan sebelum proses utama berjalan.
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.