Sabtu, 03 Januari 2026

Apa Yang Bisa Saya Lakukan dengan C?

Ini pertanyaan sangat sehat untuk orang yang benar-benar mau belajar C 👍
Saya jawab bukan dengan teori, tapi eksperimen nyata yang bisa Anda lakukan sekarang juga di Linux Mint, dan tiap eksperimen punya efek “wah” karena memperlihatkan apa yang tidak bisa dilakukan bahasa lain.

Saya susun dari paling aman → makin dekat ke mesin.


🔥 1️⃣ Lihat RAM “hidup” (Stack vs Heap)

Kesan: “Oh… variabel itu benar-benar punya alamat!”

#include <stdio.h>
#include <stdlib.h>

int main() {
    int a = 10;
    int *p = malloc(sizeof(int));
    *p = 20;

    printf("a (stack) = %d, alamat: %p\n", a, &a);
    printf("*p (heap) = %d, alamat: %p\n", *p, p);

    free(p);
    return 0;
}

Compile & run:

gcc ram.c -o ram
./ram

👉 Wah moment:
Anda melihat alamat RAM nyata, bukan konsep abstrak.


🔥 2️⃣ Program C mengintip memori sendiri

Kesan: “Program bisa membaca dirinya sendiri?!”

#include <stdio.h>

int main() {
    int x = 123;
    unsigned char *p = (unsigned char *)&x;

    for (int i = 0; i < sizeof(x); i++)
        printf("%02x ", p[i]);

    printf("\n");
}

👉 Anda melihat byte mentah dalam memori.


🔥 3️⃣ Program C bicara langsung ke OS (syscall)

Kesan: “Ini bukan printf, ini OS beneran!”

#include <unistd.h>

int main() {
    write(1, "Hello langsung ke kernel\n", 25);
    return 0;
}

Cek:

strace ./a.out

👉 Anda melihat system call ke kernel Linux.


🔥 4️⃣ Fork: satu program jadi dua

Kesan: “Program membelah diri!”

#include <stdio.h>
#include <unistd.h>

int main() {
    fork();
    printf("Saya hidup!\n");
    return 0;
}

👉 Satu source → dua proses OS.


🔥 5️⃣ Lihat proses Linux dari C (seperti ps)

Kesan: “C membaca sistem secara langsung”

#include <stdio.h>
#include <dirent.h>

int main() {
    DIR *d = opendir("/proc");
    struct dirent *dir;

    while ((dir = readdir(d)) != NULL) {
        if (dir->d_type == DT_DIR)
            printf("%s\n", dir->d_name);
    }

    closedir(d);
}

👉 /proc = jiwa Linux, dibaca pakai C.


🔥 6️⃣ Ukur kecepatan kode Anda sendiri

Kesan: “Oh… performa itu terasa!”

#include <stdio.h>
#include <time.h>

int main() {
    clock_t start = clock();
    for (long i = 0; i < 1000000000; i++);
    clock_t end = clock();

    printf("Waktu: %.2f detik\n",
           (double)(end - start) / CLOCKS_PER_SEC);
}

👉 Anda mulai merasakan biaya CPU.


🔥 7️⃣ Mini shell Linux (seperti bash kecil)

Kesan: “Saya bikin OS mini!”

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    char *cmd[] = {"ls", NULL};

    if (fork() == 0)
        execvp(cmd[0], cmd);
    else
        wait(NULL);

    return 0;
}

👉 Anda memanggil program lain seperti shell.


🔥 8️⃣ Bikin crash sengaja (dan paham kenapa)

Kesan: “Segmentation fault itu masuk akal!”

int main() {
    int *p = 0;
    *p = 10;
}

Run:

./a.out

👉 Sekarang Anda mengerti kesalahan fatal, bukan takut.


🔥 9️⃣ Lihat assembly hasil C Anda

Kesan: “C → mesin!”

gcc -S test.c

Buka file .s.

👉 Anda melihat bahasa CPU.


🔥 🔟 Mini roadmap “ketagihan C”

Jika Anda melakukan eksperimen 1–5 saja, biasanya muncul:

“Oh… ini yang bikin semua software bisa jalan.”

Lanjutkan dengan:

  1. Pointer & memory layout
  2. System call Linux
  3. Process & thread
  4. File descriptor
  5. Networking dasar
  6. Driver / kernel (teori)

🎯 Kenapa ini bikin kagum?

Karena C:

  • Tidak menyembunyikan mesin
  • Tidak menipu performa
  • Tidak memanjakan

C mengajak Anda melihat realitas komputer


Kalau Anda mau, langkah berikutnya saya bisa:

  • 📘 Buat challenge 7 hari belajar C
  • 🧠 Jelaskan 1 konsep C per hari + eksperimen
  • 🛠️ Bikin proyek kecil: mini-OS mindset
  • ⚙️ Hubungkan eksperimen C ↔ BIOS ↔ kernel

Tinggal bilang mau lanjut ke yang mana.

0 komentar:

Posting Komentar

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Press Release Distribution