minitalk projesi, iki farklı sürecin (process) sadece UNIX sinyalleri kullanarak haberleşmesini
sağlar. Bir sunucu süreci (`server`) ve bir istemci süreci (`client`) oluşturularak, karakter
tabanlı veri iletimi gerçekleştirilir.
Bu proje sayesinde sinyallerle veri iletişimi, sinyal handler yönetimi (`signal()`, `sigaction()`),
bit manipülasyonu ve zamanlamanın kritik olduğu düşük seviyeli iletişim teknikleri konusunda pratik
yaptım.
so_long projesinde, küçük bir labirent oyun motoru geliştirdim. Harita okuma, oyuncu hareketi,
düşman yerleşimi ve kazanma/bitirme koşulları gibi temel oyun mekaniklerini C dilinde kodladım.
MLX (MiniLibX) kütüphanesi kullanarak grafiksel arayüz oluşturmayı, olay yönetimi (event handling)
ve key-mapping gibi GUI kavramlarını öğrendim. Bellek yönetimi ve gerçek zamanlı ekran
güncellemeleri üzerine çalıştım.
push_swap, sınırlı sayıda izin verilen işlemlerle bir sayı listesini en az adımda sıralamayı
amaçlayan bir projedir. Stack veri yapısı üzerinde `push`, `swap`, `rotate`, `reverse rotate` gibi
işlemlerle minimum hamlede çözüm üretmek hedeflenmiştir.
Bu projeyle birlikte algoritmik düşünme, sorting optimizasyonları, big-O analizleri ve farklı veri
yapıları kullanımı (linked list vs array) konusunda derinlemesine bilgi kazandım.
philosophers projesi, klasik "Filozoflar Problemi"ni çözerek çoklu iş parçacığı (thread) yönetimi,
mutex kullanımı ve deadlock önleme tekniklerini öğrenmeyi amaçlar. Her filozof bir iş parçacığıdır
ve çatal paylaşımı sırasında senkronizasyon gerektirir.
Bu projeyle pthread kullanımı, mutex kilitleme ve açma mekanizmaları, race condition önleme,
starvation ve deadlock yönetimi gibi çok çekirdekli sistemlerde kritik olan konuları pratiğe döktüm.
minishell projesi, temel komut satırı işlemlerini gerçekleştiren bir kabuk (shell) programı
geliştirme sürecini kapsar. `cd`, `echo`, `pwd`, `export`, `unset`, `env`, `exit` gibi dahili
komutların yanı sıra, dış programların çalıştırılması da desteklenir.
Bu proje sayesinde tokenizer, parser, abstract syntax tree (AST), process fork/exec yönetimi, dosya
yönlendirme (redirection), pipe yönetimi ve ortam değişkenleri (env) kontrolü gibi ileri düzey UNIX
programlama konularında derinleşme imkânı buldum.