https://www.redhat.com/sysadmin/redirect-shell-command-script-output
yukarıda gördüğümüz olay bir programın redirect ve pipe olmadığı durumda nasıl çalıştığını göstermekte.
program klavyeden gelen veriyi okuyor ve ekrana yazma işlemi yapıyor. Peki redirect ekleseydik ne olurdu?
klavyeden gelen veriyi dosyanın içerisine yazdırmış olurduk. Bu basit söylemin altında neler oluyor birde ona bakalım.
yukarıda bizim programımızın nasıl bir bağlantı içerisinde olduğunu görüyoruz. sol taraftaki kutuda dosyamızı daha açmadık ve bundan dolayı tanımlı değil lakin sağ taraftaki kutuda dosyamızı open fonksiyonu ile açtık ve 3 a.txt yi tanımlıyor. şimdi bildiğiniz gibi bizim redirectimizin türüne göre modlarımız vardı (input ve output gibi). “>” bu redirectimizin görevi çıktıyı içerisine yazmaktı ve ekrana basmamaktı bunu nasıl sağlayabiliriz çıktılar şuan nereye gidiyor? ekrana peki biz ekranın bulunduğu 1’e a.txt yi yapıştırsak o zaman ne olur? tabiki çıktıyı a.txt’nin içerisine yazar peki biz bunu nasıl yapacağız? dup2 fonksiyonuyla yapacağız.
int dup2(int oldfd, int newfd);
yukarıda gördüğünüz gibi yapmamız gereken ilk parametreye 1 yazıp ikinci parametreye a.txt’nin bulunduğu fd numarasını vermek yani 3’ü. sonrasında olan durumsa şu:
dup2 fonksiyonu 3. fd de bulunan a.txt yi silebilir ama her zaman için yapar diyemiyoruz çünkü bunun garantisini vermez diyor. gördüğünüz gibi şuan Ekran yok eğerki biz ekranı daha öncesinde dup fonksiyonu ile bir yerde saklamadıysak ekranı kaybetmiş olduk geçmiş olsun :) olay bu kadar basit aslında daha detaylı bilgi için “what is the file descriptor” yazabilirsiniz.
Open: