WhatsApp Görsel 2022-12-20 saat 20.02.51.jpg

https://www.redhat.com/sysadmin/redirect-shell-command-script-output

1.png

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?

1.png

klavyeden gelen veriyi dosyanın içerisine yazdırmış olurduk. Bu basit söylemin altında neler oluyor birde ona bakalım.

main.png

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:

main.png

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: