(Hầu hết) mọi thứ đều là một tệp nhưng không phải mọi thứ đều là một tệp thông thường . Sẽ không có ý nghĩa khi gọi một trình soạn thảo văn bản trên một cái gì đó là một tệp đặc biệt như thư mục, ổ cắm mạng, cổng nối tiếp, v.v.
Tệp /dev/stdout
có thể là một trong nhiều thứ tùy thuộc vào biến thể unix:
- một tập tin đặc biệt của người Viking, thường là một thiết bị ký tự;
- một liên kết biểu tượng ma thuật của người Viking chỉ vào tệp mà quá trình truy cập nó đã mở trên mô tả này;
- một liên kết tượng trưng cho một trong những điều trên.
Trong mọi trường hợp, việc mở /dev/stdout
và các tệp tương tự sẽ tạo ra một bộ mô tả tệp mới được liên kết với cùng một tệp mà ứng dụng đã mở trên bộ mô tả tệp 1. Tiêu chuẩn đầu ra cho đầu ra - kernel không quan tâm.
Khi bạn chạy một chương trình trong một thiết bị đầu cuối, tất cả ba mô tả tiêu chuẩn (0 = đầu vào tiêu chuẩn, 1 = đầu ra tiêu chuẩn, 2 = lỗi tiêu chuẩn) được mở trên thiết bị đầu cuối. Đọc từ thiết bị đó trả về các ký tự được người dùng nhập và viết vào thiết bị đó sẽ hiển thị văn bản trong cửa sổ đầu cuối. (Không có cách tiêu chuẩn nào, được cung cấp một thiết bị đầu cuối, để đọc đầu ra mà nó hiển thị hoặc đưa đầu vào vào nó.)
Khi bạn chạy cat /dev/stdout
, điều đó thực hiện chính xác giống như cat /dev/stdin
hoặc cat /dev/stderr
, bởi vì ba mô tả tệp này được kết nối với cùng một tệp: nó yêu cat
cầu đọc từ thiết bị đầu cuối. Đó là những gì cat
không có tranh luận quá.
Nếu bạn đã chạy cat /dev/stdout >foo
, sau đó /dev/stdout
sẽ tham khảo tệp foo
- lệnh đó tương đương với cat foo >foo
. Tùy thuộc vào việc cat
triển khai, nó có thể bị lỗi (phiên bản GNU phàn nàn rằng tệp đầu vào của chế độ là tệp đầu ra,) hoặc nó có thể không làm gì cả vì nó đọc từ tệp foo
trống ( >foo
chỉ cắt bớt tệp). Với một phiên bản cat
không phát hiện trường hợp đặc biệt này, nếu foo
không trống, cat /dev/stdout >>foo
hoặc tương đương cat foo >>foo
sẽ nối thêm nội dung của tệp vào chính nó vô thời hạn.
Khi bạn chạy vim /dev/stdout
, nó phàn nàn vì nó không biết cách chỉnh sửa thiết bị đầu cuối (điều đó không có ý nghĩa gì).