UNIX/Linux Sistem Programlama
Bu kitap Kaan ASLAN tarafından C ve Sistem Programcıları Derneği’nde verilen UNIX/Linux Sistem Programlama kursundaki kurs notları temel alınarak oluşturulmuştur.
Kitaptaki içerik belli bir kaynak referans alınarak oluşturulmamıştır ve içeriğin oluşturulmasında yapay zeka araçlarından faydalanılmamıştır. Bu bakımdan içerik tamamen özgündür.
Kurs notlarının kitap haline getirilmesinde önemli katkılarda bulunan Ahmet CEFAKAR’a ve Oğuzhan KARA’ya teşekkür ederiz.
Kitabımızın konusu ile ilgili en önemli kaynaklar Kaynaklar bölümünde listelenmiştir. W. Stevens’in (sonradan Stephen Rago da eklemeler yapmıştır) Advanced Programming in the UNIX Envirionment literatürün en önemli yabancı kitabıdır ve güncelliğini halen büyük ölçüde ettirmektedir.
Kitabımızı diğer yabancı kaynaklardan ayıran en önemli farklılıkları şunlardır:
Daha kapsamlı ve ayrıntılı olması
Daha pedagojik olması
Örnek kodlarla desteklenmiş olması
Bu kitap oluşturulma aşamasındadır, içerik sürekli güncellenmektedir. Dokümanın kurs formatındaki saf metin haline aşağıdaki bağlantıdan erişebilirsiniz:
https://github.com/CSD-1993/KursNotlari
Ön Gereksinimler
Okuyucunun C programlama diline hâkim olduğu varsayılmaktadır.
Contents:
- 1. Giriş
- 1.1. Sistem Programlama Nedir?
- 1.2. İşletim Sistemi Nedir?
- 1.3. İşletim Sistemlerinin Sınıflandırılması
- 1.4. Bilgisayar Donanımlarının Tarihsel Gelişimi
- 1.5. İşletim Sistemlerinin Tarihsel Gelişimi
- 1.6. POSIX ve SUS Standartları
- 1.7. GNU Projesi, Özgür Yazılım ve Açık Kaynak Akımları
- 1.8. Yazılım Sistemlerinde Katmanlı Yapılar ve Kod Tekrarının Engellenmesi
- 1.9. Kütüphanelerle İlgili Temel Kavramlar
- 1.10. Donanıma İlişkin Temel Kavramlar
- 1.11. Gömülü Sistemler
- 1.12. Programlamaya İlişkin Temel Kavramlar ve Araçlar
- 1.13. C Programlarının Derlenerek Çalıştırılması
- 1.14. Sistem Fonksiyonları, POSIX Fonksiyonları ve Standart C Fonksiyonları
- 1.15. man Sayfaları
- 2. Komut Satırı Argümanlarının Ele Alınması
- 3. Temel Kavramlar ve Hazırlık
- 3.1. Proses Kavramı
- 3.2. Linux’ta Kullanıcı Yönetimi: /etc/passwd ve /etc/group Dosyaları
- 3.3. Kullanıcı İsimleri, Kullanıcı ID’leri ve Grup ID’leri
- 3.4. Proseslerin Gerçek ve Etkin Kullanıcı ID’leri ve Grup ID’leri
- 3.5. Örnek Uygulama: Basit Bir Kabuk Programı Yoluyla Sisteme Giriş Yapılması
- 3.6. POSIX Fonksiyonlarında Hataların Ele Alınması
- 4. Dosyalar ve Dizinler Üzerinde İşlemler
- 4.1. Dosyaların Kullanıcı ID’leri ve Grup ID’leri
- 4.2. Dosyaların ve Dizinlerin Erişim Hakları
- 4.3. Dosyalarda ve Dizinlerde Erişim Kontrolleri
- 4.4. Dosya Sistemine İlişkin Temel Kavramlar
- 4.5. Temel Dosya Fonksiyonları
- 4.6. Yardımcı Dosya Fonksiyonları ve Bunlarla İlişkili Kavramlar
- 4.7. Dizin Girişlerinin Elde Edilmesi
- 4.8. Dosya Betimleyicilerinin Çiftlenmesi
- 4.9. IO Yönlendirmesi
- 4.10. Linux’un mem Aygıt Sürücüsüne İlişkin Aygıtlar
- 4.11. Kabukta Boru İşlemleri
- 5. İşlemcilerin Koruma Mekanizması
- 6. Standart C Kütüpahnesinin Uyguladığı Dosya Tamponlama Mekanizması
- 6.1. Sistem Fonksiyonlarını Çağırmanın Maliyeti
- 6.2. Tamponlama Mekanizmasının Çalışma Biçimi
- 6.3. C’nin Standart Dosya Fonksiyonlarıyla Köprü Kuran POSIX Fonksiyonları
- 6.4. Standart C Dosya Fonksiyonlarında Tamponlama Modları
- 6.5. stdin ve Dosya Sonu (EOF) Kavramı
- 6.6. stdin’den Okuma Yapan Standart Fonksiyonlara Genel Bakış
- 6.7. getchar Fonksiyonu
- 6.8. gets Fonksiyonu (Kullanımdan Kaldırılmış)
- 6.9. gets_s Fonksiyonu
- 6.10. fgets Fonksiyonu ile gets_s Alternatifi
- 6.11. scanf Fonksiyonu
- 6.12. ungetc Fonksiyonu
- 6.13. fgetc ve getc Fonksiyonları
- 7. Proses Yönetimine Giriş: PID, getpid/getppid ve fork Fonksiyonu
- 8. fork Fonksiyonunun Ayrıntıları ve Proses Sonlandırma