C ile dizgiler, dosyalar ve veri biçimleri
C’de metni güvenle işler, metin ve ikili dosyaları okuyup yazar, bozuk girdiye dayanıklı ayrıştırıcılar geliştirirsin.
Seviye 201 · 20 ders · 18 pratik lab
Dersler
Dizgiler
- string.h işlevleri: strlen, strcmp, strchr, strstr
- Güvenli kopyalama ve birleştirme: snprintf ve strlcpy
- Metni parçalamak: strtok_r ve strsep
- Sayı dönüştürme: atoi yerine strtol ve hata denetimi
- Karakter sınıfları: ctype.h ve UTF-8 baytları
- Kısa görev: metindeki kelimeleri say
Akışlar ve dosyalar
- stdio tamponlaması: fflush, setvbuf ve stderr
- Uzun satırları güvenle okumak: getline
- İkili dosyalar: fread, fwrite, fseek ve ftell
- Dizinleri gezmek: opendir ve readdir
- Geçici dosyalar: mkstemp ve güvenli izinler
- Kısa görev: hata denetimli dosya kopyalayıcı
Biçimler ve ayrıştırma
- Yapı yerleşimi: hizalama, dolgu ve packed
- Bayt sırası: htonl, ntohl ve taşınabilir okuma
- CSV ayrıştırmak: tırnaklar ve bozuk satırlar
- key=value yapılandırma dosyası okuyucu
- İkili dosya başlığı okumak: sihirli sayı ve uzunluk alanları
- Kendi onaltılık döküm aracını yazmak
- Kısa görev: BMP dosyasının boyutlarını oku
Bitirme
- Bitirme görevi: bozuk girdiye dayanıklı kayıt dosyası ayrıştırıcı
Pratik lablar
- Satırı strtok_r ile alanlara ayırmak: Noktalı virgülle ayrılmış bir kayıt satırını strtok_r ile alanlara ayırıp alan sayısını döndür.
- Port numarasını strtol ile doğrulamak: atoi kullanan port okuyucusunu strtol, endptr ve errno kontrolleriyle değiştir; "80abc" ve "99999" reddedilsin.
- Etiketleri sınırlı tamponda birleştirmek: Etiket listesini virgülle birleştiren fonksiyonu tampon sınırını asla aşmayacak ve kırpılmayı bildirecek şekilde yaz.
- UTF-8 metinde karakter saymak: Bayt sayısı yerine UTF-8 karakter sayısını dönen fonksiyonu yaz; bozuk dizilerde hata versin.
- En uzun satırı getline ile bulmak: Bir dosyadaki en uzun satırı ve numarasını getline ile bul; satır uzunluğu sınırı olmasın.
- İkili kayıt dosyasında kayda atlamak: Sabit boyutlu ikili kayıtlar içeren dosyada fseek ile n'inci kaydı oku ve dosya dışı istekleri reddet.
- Ayar dosyasını mkstemp ile yarım kalmadan kaydetmek: Ayarları mkstemp ile geçici dosyaya yazıp rename ile değiştiren kaydetme fonksiyonu yaz; izinler 0600 olsun.
- Dizindeki uzantıları saymak: opendir ve readdir ile bir klasördeki dosyaları uzantılarına göre say; . ve .. girdilerini atla.
- Paket başlığını ağ bayt sırasından okumak: Bir bayt dizisinden 32 bit uzunluk ve 16 bit tür alanlarını taşınabilir biçimde okuyan fonksiyonu yaz.
- Yapıdaki dolgu baytlarını azaltmak: Bir sensör kaydı yapısının alan sırasını değiştirerek boyutunu küçült ve offsetof ile düzeni test et.
- Struct'ı dosyaya taşınabilir yazmak: fwrite ile ham struct yazan kodu alan alan küçük-uçlu serileştirmeye çevir ve geri okumayı test et.
- Tırnaklı CSV alanlarını ayırmak: İçinde virgül bulunan tırnaklı alanları doğru ayıran bir CSV satır ayrıştırıcısı yaz.
- Yorumlu anahtar=değer dosyasını okumak: Yorum satırlarını, boşlukları ve tekrarlanan anahtarları doğru işleyen bir ayar okuyucu tamamla.
- Bozuk CSV satırlarını raporlamak: Kapanmamış tırnak ve eksik alan içeren satırları atlayıp satır numarasıyla raporlayan ayrıştırıcıyı yaz.
- WAV başlığından örnekleme hızını okumak: Bir WAV dosyasının sihirli baytlarını doğrula ve örnekleme hızı ile kanal sayısını yazdır.
- Uzunluk alanına körü körüne güvenmemek: Başlıktaki uzunluk alanını dosya boyutuyla karşılaştırmayan okuyucuya sınır kontrolleri ekle ve kesik dosyaları reddet.
- İki ikili dosyanın farkını hex olarak göstermek: İki ikili dosyayı karşılaştırıp farklı baytların ofsetini ve değerlerini hex olarak listeleyen aracı yaz.
- Dizin gezerken yolları taşmadan birleştirmek: Alt dizinlere inen gezginde yol birleştirmeyi sabit boyutlu tamponda taşmasız yap, sığmayan yolları say ve derin dizin testlerini geç.
Kurs hakkında
C’de metni güvenle işler, metin ve ikili dosyaları okuyup yazar, bozuk girdiye dayanıklı ayrıştırıcılar geliştirirsin.
Ne öğreneceksin
- Dizgiler
- Akışlar ve dosyalar
- Biçimler ve ayrıştırma
- Bitirme
Ön koşullar
Aynı yolun 101 düzeyindeki kurslarını bitirmiş olmak ya da o konuları biliyor olmak yeterlidir.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 201 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.