Trong Unix, hầu hết các đối tượng bạn có thể đọc và ghi - các tệp thông thường, đường ống, thiết bị đầu cuối, ổ đĩa thô - đều được tạo ra để giống với các tệp.
Một chương trình như catđọc từ đầu vào tiêu chuẩn của nó như thế này:
n = read(0, buffer, 512);
yêu cầu 512 byte. nlà số byte thực sự đọc hoặc -1 nếu có lỗi.
Nếu bạn đã làm điều này nhiều lần với một tệp thông thường, bạn sẽ nhận được một loạt các lần đọc 512 byte, sau đó đọc ngắn hơn một chút ở phần đuôi của tệp, sau đó 0 nếu bạn cố đọc qua phần cuối của tệp. Vì vậy, catsẽ chạy cho đến khi n<= 0.
Đọc từ một thiết bị đầu cuối là hơi khác nhau. Sau khi bạn nhập một dòng, kết thúc bằng Enterkhóa, readchỉ trả về dòng đó.
Có một vài ký tự đặc biệt bạn có thể gõ. Một là Ctrl-D. Khi bạn nhập cái này, hệ điều hành sẽ gửi tất cả dòng hiện tại mà bạn đã nhập (chứ không phải Ctrl-Dchính nó) đến chương trình đang đọc. Và đây là điều tình cờ: nếu Ctrl-Dlà ký tự đầu tiên trên dòng, chương trình được gửi một dòng có độ dài 0 - giống như chương trình sẽ thấy nếu nó chỉ đến cuối một tệp thông thường. cat không cần phải làm gì khác , cho dù đó là đọc từ một tệp thông thường hoặc thiết bị đầu cuối.
Một nhân vật đặc biệt khác là Ctrl-Z. Khi bạn nhập nó, bất cứ nơi nào trong một dòng, hệ điều hành sẽ loại bỏ bất cứ thứ gì bạn đã nhập cho đến thời điểm đó và gửi tín hiệu SIGTSTP đến chương trình, thường dừng (tạm dừng) nó và trả lại quyền điều khiển cho trình bao.
Vì vậy, trong ví dụ của bạn
$ cat > file.txt
pa bam pshhh<Ctrl+Z>
[2]+ Stopped cat > file.txt
bạn đã gõ một số ký tự bị loại bỏ, sau đó catbị dừng mà không ghi bất cứ điều gì vào tệp đầu ra của nó.
$ cat > file.txt
pa bam pshhh
<Ctrl+Z>
[2]+ Stopped cat > file.txt
bạn đã gõ vào một dòng, nó catđọc và ghi vào tệp đầu ra của nó, rồi Ctrl-Zdừng lại cat.