Olmazsa Olmaz: stdio.h

Herhangi bir C programı yazdıysanız, hemen hemen her zaman stdio.h başlık dosyasını programın başında çağırdığınızı fark etmişsinizdir. Aslında bu dosya, programın standart girdi ve standart çıktı ile etkileşimini sağlayan bileşenleri barındırır. İsmi bu yüzden Standard Input/Output'un kısaltmasıdır.

Brian Kernighan ve Dennis Ritchie'nin meşhur The C Programming Language kitabındaki basit bir örneği uygulayacak olursak, tanıdık sonuçlar elde ettiğimizi görebilirsiniz.

#include <stdio.h> #include <ctype.h> main() { int c; while ((c = getchar()) != EOF) putchar(tolower(c)); return 0; }

 

Yukarıdaki kodu derlediğimizde, standart girdiden okuduğu kelimelerin, küçük harfe çevrilerek standart çıktıya yazdığı görülebilir. Derlediğimiz programa lower ismini verecek olursak, örneğin aşağıdaki şekilde kullanabiliriz.

eaydin@eaydin-vt ~/devel/lower $ echo AbCdE | ./lower abcde

 

Gördüğünüz gibi, pipe işareti ile doğrudan standart girdiden gelen veriyi okuyabildik. Eğer bu verileri bir metin dosyasına yazsaydık, standart girdi olarak metin dosyasından da yönlendirebilirdik.

Önce metin dosyamızı oluşturalım.

eaydin@eaydin-vt ~/devel/lower $ echo AbCdE > karakterler eaydin@eaydin-vt ~/devel/lower $ cat karakterler AbCdE

 

Şimdi programımıza standart girdi olarak sunalım.

 

Kısacası programımız için bilginin pipe ile veya < işareti ile gelmesinin bir önemi yok. İkisi de standart girdi çünkü. Benzer şekilde ls çıktısını da programımıza yönlendirebilirdik.

 

Halbuki bölümün başında McIlroy'un belirttiği gibi, ne ls programının bizim lower programımızdan haberi var, ne de lower programı yazılırken ls ile ilgili bir noktayı dikkate aldık.

Programımızdaki getchar fonksiyonu, aslında standart girdiden veri okuyan kısımdır. puthcar fonksiyonu ise standart çıktıya veri yazmaktan sorumludur. Bu fonksiyonlar stdio.h ile sağlanır. Bu yüzden kullanmak için include etmemiz gerekir.

Eğer programı tek başına çalıştırırsak, biraz daha anlaşılabilir durum.

 

Tanıdık geldi mi? Bu bölümün başlarında cat programını tek başına çalıştırdığımızda da benzer manzarayla karşılaşmıştık. Yine standart girdiden veri bekledi. Biz Bu bir Cümle yazdıktan sonra, kendisi yine standart çıktıya verinin aynısını yazdı, tıpkı cat gibi. Ama bu sefer karakterleri küçülttü. Yine Ctrl+c ile programımızı sonlandırarak çıktık.

Burada dikkat edilmesi gereken bir diğer nokta, programımızın parametrik şekilde girdi almaması. Örneğin karakterler dosyasını argüman olarak kendisine veremezdik, çünkü programımızda gelen argümanlarla neler yapılması gerektiğini belirtmedik. Böyle olunca argümanları görmezden gelecektir, ve yukarıdaki durumun aynısı gerçekleşecektir.