Di Unix, sebagian besar objek yang dapat Anda baca dan tulis - file biasa, pipa, terminal, drive disk mentah - semuanya dibuat menyerupai file.
Program seperti catmembaca dari input standarnya seperti ini:
n = read(0, buffer, 512);
yang meminta 512 byte. nadalah jumlah byte yang benar-benar dibaca, atau -1 jika ada kesalahan.
Jika Anda melakukan ini berulang kali dengan file biasa, Anda akan mendapatkan banyak bacaan 512-byte, kemudian bacaan yang lebih pendek di ujung file, lalu 0 jika Anda mencoba membaca melewati akhir file. Jadi, catakan berjalan hingga n<= 0.
Membaca dari terminal sedikit berbeda. Setelah Anda mengetikkan garis, diakhiri oleh Enterkunci, readhanya mengembalikan garis itu.
Ada beberapa karakter khusus yang dapat Anda ketik. Satu adalah Ctrl-D. Saat Anda mengetik ini, sistem operasi mengirimkan semua baris saat ini yang telah Anda ketikkan (tetapi bukan Ctrl-Ddirinya sendiri) ke program yang sedang membaca. Dan inilah hal kebetulan: jika Ctrl-Dadalah karakter pertama di telepon, program akan dikirim dengan panjang 0 - seperti program akan melihat apakah hanya sampai di akhir file biasa. cat tidak perlu melakukan sesuatu yang berbeda , apakah itu membaca dari file biasa atau terminal.
Karakter spesial lainnya adalah Ctrl-Z. Saat Anda mengetiknya, di mana saja dalam satu baris, sistem operasi membuang apa pun yang Anda ketikkan sampai saat itu dan mengirimkan sinyal SIGTSTP ke program, yang biasanya berhenti (berhenti) dan mengembalikan kontrol ke shell.
Jadi, dalam contoh Anda
$ cat > file.txt
pa bam pshhh<Ctrl+Z>
[2]+ Stopped cat > file.txt
Anda mengetik beberapa karakter yang dibuang, lalu catdihentikan tanpa menulis apa pun ke file outputnya.
$ cat > file.txt
pa bam pshhh
<Ctrl+Z>
[2]+ Stopped cat > file.txt
Anda mengetikkan satu baris, yang catmembaca dan menulis ke file outputnya, dan kemudian Ctrl-Zberhenti cat.