Di Unix, sebagian besar objek yang dapat Anda baca dan tulis - file biasa, pipa, terminal, drive disk mentah - semuanya dibuat menyerupai file.
Program seperti cat
membaca dari input standarnya seperti ini:
n = read(0, buffer, 512);
yang meminta 512 byte. n
adalah 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, cat
akan berjalan hingga n
<= 0.
Membaca dari terminal sedikit berbeda. Setelah Anda mengetikkan garis, diakhiri oleh Enterkunci, read
hanya 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 cat
dihentikan 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 cat
membaca dan menulis ke file outputnya, dan kemudian Ctrl-Zberhenti cat
.