https://github.com/wiliamhw/soal-shift-sisop-modul-2-e09-2021
https://github.com/wiliamhw/soal-shift-sisop-modul-2-e09-2021
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/wiliamhw/soal-shift-sisop-modul-2-e09-2021
- Owner: wiliamhw
- Created: 2021-04-14T03:43:49.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-04-23T08:48:48.000Z (about 4 years ago)
- Last Synced: 2025-01-21T06:12:55.380Z (5 months ago)
- Language: C
- Size: 93.8 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Kelompok E09
* 05111940000074 - Nur Ahmad Khatim
* 05111940000087 - William Handi Wijaya
* 05111940000212 - Fadhil Dimas Sucahyo# Soal 1
## Info
* Dikerjakan oleh 05111940000087 - William Handi Wijaya dan 05111940000212 - Fadhil Dimas Sucahyo.
* Tidak boleh menggunakan: `system()`, *shell script*, `mkdir()`, dan `rename` (yang di bahasa C).
* Menggunakan `fork` dan `exec`.
* Tidak bolehh menggunakan `cron`.
* Tips:
* Gunakan fungsi `wait()` dan `sleep()` untuk memperlancar.
* untuk mendownload zip, bisa menggunakan command:
`wget --no-check-certificate "https://drive.google.com/uc?id=< ID-FILE >&export=download" -O < Nama_untuk_filenya.ext >`## Subsoal a
### Penjelasan Soal
Di soal ini, kami disuruh:
* Membuat folder:
* **Musyik** untuk mp3
* **Fylm** untuk mp4
* **Pyoto** untuk jpg### Penyelesaian Soal
* Buat ketiga folder tersebut di *current directory* menggunakan perintah `mkdir` pada `exec`.## Subsoal b
### Penjelasan Soal
Di soal ini, kami disuruh:
* Download file zip dari masing-masing folder melalui link berikut:
* Musik:
* Foto:
* Film:### Penyelesaian Soal
1. Dapatkan id file dari masing-masing folder.
2. Buat link untuk mendownload file berdasarkan id file.
3. Download file zip menggunakan command `wget` ke folder sementara bernama `tmpDir`.## Subsoal c
### Penjelasan Soal
Di soal ini, kami disuruh:
* Extract masing-masing zip.### Penyelesaian Soal
* Extract masing-masing zip di folder `tmpDir` dengan perintah `unzip`.## Subsoal d
### Penjelasan Soal
Di soal ini, kami disuruh:
* Pindahkan file ke folder yang sesuai.### Penyelesaian Soal
1. Scan file di dalam folder `tmpDir` dan dapatkan ekstensinya.
2. Untuk setiap ekstensi, lakukan perintah ini:
1. Jika file berekstensi mp3, masukkan ke folder **Musyik**.
2. Jika file berekstensi mp4, masukkan ke folder **Fylm**.
3. Jika file berekstensi jpg, png, atau jpeg, masukkan ke folder **Pyoto**.
3. Jika telah selesai, hapus folder `tmpDir`.## Subsoal e
### Penjelasan Soal
Di soal ini, kami disuruh:
* Program berjalan secara otomatis 6 jam sebelum waktu ulang tahun Stevany,
yaitu: `09 April Pukul 22.22 WIB`### Penyelesaian Soal
1. Buat program ini menjadi Daemon Process.
2. Dapatkan tanggal dan waktu saat ini hingga ketelitian menit.
3. Jika tanggal = `9`, bulan = `4`, jam = `16`, dan menit = `22`, jalankan program ini.## Subsoal f
### Penjelasan Soal
Di soal ini, kami disuruh:
1. Pada `09 April Pukul 22.22 WIB`, zip **Musyik**, **Fylm**, dan **Pyoto** dengan nama `Lopyu_Stevany.zip`.
2. Hapus folder **Musyik**, **Fylm**, dan **Pyoto**.### Penyelesaian Soal
* Pada `09 April Pukul 22.22 WIB`, zip dan hapus ketiga folder ini dengan perintah `zip -rm Lopyu_Stevany.zip Musyik Fylm Pyoto`.# Soal 2
## Info
* Dikerjakan oleh 05111940000087 - William Handi Wijaya.
* Tidak boleh menggunakan: `system()`, *shell script*, `mkdir()`, dan `rename`.
* Menggunakan `fork` dan `exec`.
## Subsoal a
### Penjelasan Soal
Di soal ini kami disuruh:
1. Extract pets.zip ke dalam folder `/home/[user]/modul2/petshop`.
2. Hapus folder-folder yang ada dalam pets.zip.### Penyelesaian Soal
#### Perintah 1
1. Ubah current directory menjadi `/home/[user]/modul2/petshop`.
* Perintah: `chdir("/home/[user]/modul2/petshop")`.
2. Download folder pets.zip jika belum ada.
* Perintah: `wget --no-check-certificate 'https://docs.google.com/uc?export=download&id=1g5rehatLEkqvuuK_eooHJXB57EfdnxVD -O pets.zip`
3. Extract pets.zip dengan perintah `unzip pets.zip`.#### Perintah 2
1. Jelajahi folder pets dengan code `listFilesRecursively.c` dari modul 2.
2. Hapus setiap folder yang ditemukan di dalam pets.
1. Cek tiap path dengan `stat()` dan `S_ISREG`.
2. Jika path tersebut adalah folder, hapus folder tersebut dengan perintah `rm -r `.## Subsoal b
### Penjelasan Soal
Di soal ini kami disuruh:
1. Dapatkan jenis peliharaan dari nama file.
2. Masukan file ke dalam folder sesuai dengan jenis peliharaan.
* Contoh: jenis peliharaan kucing akan disimpan dalam `/petshop/cat`.### Penyelesaian Soal
Semua solusi di bawah ini dijalankan dalam fungsi yang menyerupai `listFilesRecursively.c`, yaitu fungsi `categorize`.#### Perintah 1
1. Pastikan file bukan berupa folder.
2. Dapatkan nama file.
3. Dapatkan jenis peliharaan dari nama file dengan perintah `strtok(, ';')`.#### Perintah 2
1. Cek apakah folder jenis peliharaan sudah terbuat.
2. Jika belum:
1. Buat folder jenis peliharaan dengan perintah `cp -r /home//log `.
2. Bersihkan folder ``.
3. Pindahkan file ke folder jenis peliharaan dengan perintah `mv `.## Subsoal c
### Penjelasan Soal
Di soal ini kami disuruh:
* Rename nama file sesuai dengan nama peliharaannya.
Contoh: `petshop/cat/joni.jpg`.### Penyelesaian Soal
Solusi di bawah ini dilakukan di dalam fungsi `categorize`, sebelum file dipindahkan.
1. Dapatkan nama hewan.
2. Copy file menjadi file baru bernama ``.
3. Pindahkan (*copy*) file `` ke folder yang tepat.
4. Hapus file lama.## Subsoal d
### Penjelasan Soal
Di soal ini kami disuruh:
1. Dapatkan jenis dan nama peliharaan kedua.
2. Pindahkan file tersebut ke folder yang tepat untuk kedua kalinya.### Penyelesaian Soal
Solusi ini akan memodifikasi solusi pada subsoal c.
* Jika terdapat peliharaan kedua:
1. Lakukan solusi no.1-3 subsoal c untuk peliharaan kedua.
2. Setelah kedua file terpindah, hapus file lama.## Subsoal e
### Penjelasan Soal
Di soal ini kami disuruh:
1. Membuat file `keterangan.txt` di setiap folder jenis peliharaan.
2. Isi file `keterangan.txt` dengan nama dan umur semua peliharaan di folder yang sama.
Format:
> nama : joni
> umur : 3 tahun
>
> nama : miko
> umur: 2 tahun
>### Penyelesaian Soal
Solusi ini di antara solusi no.1 dan no.2 pada subsoal d.
1. Dapatkan umur.
2. Jika file `keterangan.txt` tidak ada, buat file tersebut.
3. Isi `keterangan.txt` sesuai dengan format.# Soal 3
## Info
* Dikerjakan oleh 05111940000074 - Nur Ahmad Khatim.
* Tidak boleh menggunakan: `system()` dan `mkdir()`.
* **Program utama** merupakan **SEBUAH PROGRAM C**.
* **Wajib** membuat algoritma Caesar Cipher pada program utama yang dibuat.## Subsoal a
### Penjelasan Soal
1. Membuat sebuah program C yang membuat sebuah direktori setiap 40 detik.
2. Penamaan direktori sesuai timestamp [YYYY-mm-dd_HH-ii-ss].### Penyelesaian Soal
1. Membuat while looping yang berjalan setiap 40 detik dengan bantuan variabel time_t dan fungsi difftime().
2. Fork child process.
3. Menjalankan perintah membuat directory `mkdir` dengan penamaan sesuai timestamp dengan bantuan fungsi strftime() dan execv().## Subsoal b
### Penjelasan Soal
1. Mengisi setiap direktori dengan 10 gambar yang didownload dari https://picsum.photos/ setiap 5 detik.
2. Setiap gambar diberi nama sesuai timestamp [YYYY-mm-dd_HH-ii-ss].
3. Gambar berukuran (n%1000) + 50 pixel dengan n adalah detik Epoch Unix.## Penyelesaian Soal
1. Membuat while looping yang berjalan setiap 5 detik dengan bantuan variabel time_t dan fungsi difftime().
2. Fork child process.
3. Mengambil detik Epoch Unix `int epoch = ((int)time(NULL) % 1000) + 50;`.
4. Menjalankan perintah download `wget` dengan penamaan sesuai timestamp dengan bantuan fungsi strftime() dan execv() serta ditempatkan sesuai path direktori.
5. While looping dibreak setelah download 10 gambar.## Subsoal c
### Penjelasan Soal
1. Setelah direktori terisi 10 gambar, program membuat sebuah file `status.txt`.
2. File tersebut berisi pesan "Download Success"
3. Pesan terenkripsi dengan teknik Caesar Cipher dan dengan shift 5.
4. Setelah file tersebut dibuat, direktori dizip dan direktori didelete.### Penyelesaian Soal
1. Mengenkripsi text "Download Success" menggunakan algoritma Caesar Cipher.
2. Membuat file `status.txt` `FILE *statustext = fopen(path_status, "w");`.
3. Mengisi file dengan text yang sudah dienkripsi.
4. Zip direktori dengan perintah `zip` dengan option `-rm` dan bantuan fungsi execv().## Subsoal d
### Penjelasan Soal
1. Program dapat men-generate sebuah program "Killer" yang executable.
2. Program "Killer" akan menterminasi semua proses program yang sedang berjalan dan menghapus dirinya sendiri setelah program dijalankan.
3. Program "Killer" merupakan **program bash**.### Penyelesaian Soal
1. Membuat sebuah FILE `Killer.sh`
2. Mengisi file tersebut dengan perintah `kill` sesuai pid yang didapatkan dari fungsi getpid().
3. Menambahkan isi file dengan perintah `rm -- "$0"` untuk menghapus diri sendiri.## Subsoal e
### Penjelasan Soal
1. Program utama dapat dijalankan di dua mode.
2. Mode pertama dijalankan dengan argumen -z, program utama langsung menghentikan semua operasinya ketika program "Killer" dijalankan.
3. Mode kedua dijalankan dengan argumen -x, program utama berhenti namun membiarkan proses di setiap direktori yang masih berjalan hingga selesai.### Penyelesaian Soal
1. Menjadikan fungsi main() dapat menerima argumen.
2. Mengecek argumen yang diinputkan menggunakan fungsi strcmp().
3. Untuk mode = 1, mengambil pid dengan getpid() dari process utama.
4. Jika mode = 1, maka FILE `Killer.sh` dibuat pada saat Fork child process untuk membuat direktori.
5. Jika mode = 2, hanya perlu pid dari process utama dan akan membuat FILE `Killer.sh` pada saat itu juga.# Kendala
Di soal no.1, terdapat beberapa kendala, yaitu:
1. Proses Daemon tidak terbuat.
2. Proses Daemon tidak dapat berjalan hingga selesai meskipun sudah terbuat.