Unix'te okuyabildiğiniz ve yazabildiğiniz çoğu nesne - sıradan dosyalar, borular, terminaller, ham disk sürücüleri - hepsi dosyalara benzeyecek şekilde yapılmıştır.
Gibi bir program cat
şöyle onun standart girişinden okur:
n = read(0, buffer, 512);
512 bayt için sorar. n
gerçekte okunan bayt sayısı, hata varsa -1.
Bunu sıradan bir dosya ile tekrar tekrar yaparsanız, bir sürü 512 baytlık okuma alırsınız, daha sonra dosyanın kuyruk ucunda biraz daha kısa, daha sonra dosyanın sonuna kadar okumaya kalkarsanız, 0 okursunuz. Yani, <= 0 cat
olana kadar çalışacaktır n
.
Bir terminalden okumak biraz farklıdır. EnterAnahtar ile sonlandırılan bir satır yazdıktan sonra , read
sadece o satırı döndürür.
Yazabileceğiniz birkaç özel karakter var. Birincisi Ctrl-D. Bunu yazdığınızda, işletim sistemi yazdığınız mevcut satırın tamamını (ancak Ctrl-Dkendisini değil ) okumayı yapan programa gönderir . Ve işte serendipitous şey: Ctrl-Dsatırdaki ilk karakter ise, program 0 uzunluğunda bir satır gönderilir - tıpkı programın sıradan bir dosyanın sonuna gelip gelmediğini görmesi gibi. Sıradan bir dosyadan veya terminalden okuyor olsun, cat
farklı bir şey yapmanıza gerek yoktur .
Başka bir özel karakter Ctrl-Z. Bir satırın herhangi bir yerine yazdığınızda, işletim sistemi o noktaya kadar yazdığınız her şeyi atar ve programa bir SIGTSTP sinyali gönderir, bu program normalde durur (duraklar) ve kabuğa kontrolü döndürür.
Yani senin örneğinde
$ cat > file.txt
pa bam pshhh<Ctrl+Z>
[2]+ Stopped cat > file.txt
atılan bazı karakterleri yazdınız cat
, çıktı dosyasına hiçbir şey yazmadan durduruldunuz.
$ cat > file.txt
pa bam pshhh
<Ctrl+Z>
[2]+ Stopped cat > file.txt
cat
çıktı dosyasını okuyan ve yazan bir satır yazdınız ve sonra Ctrl-Zdurdunuz cat
.