(Hampir) semuanya adalah file tetapi tidak semuanya adalah file biasa . Tidak masuk akal untuk memanggil editor teks pada sesuatu yang merupakan file khusus seperti direktori, soket jaringan, port serial, dll.
File /dev/stdout
dapat menjadi salah satu dari beberapa hal tergantung pada varian unix:
- file "khusus", biasanya perangkat karakter;
- tautan simbolis "ajaib" yang menunjuk ke file yang proses pengaksesannya terbuka pada deskriptor ini;
- tautan simbolis ke salah satu di atas.
Dalam kasus apa pun, membuka /dev/stdout
dan file-file serupa membuat deskriptor file baru yang dikaitkan dengan file yang sama yang sudah dibuka aplikasi pada deskriptor file 1. “Output standar” berarti deskriptor file 1, dan itu hanya konvensi bahwa deskriptor file ini digunakan untuk output - kernel tidak peduli.
Ketika Anda menjalankan program di terminal, ketiga deskriptor standar (0 = input standar, 1 = output standar, 2 = standard error) dibuka pada perangkat terminal. Membaca dari perangkat itu mengembalikan karakter yang diketik oleh pengguna, dan menulis ke perangkat itu menampilkan teks di jendela terminal. (Tidak ada cara standar, diberikan perangkat terminal, untuk membaca output yang ditampilkan atau menyuntikkan input ke dalamnya.)
Ketika Anda menjalankan cat /dev/stdout
, itu melakukan hal yang persis sama dengan cat /dev/stdin
atau cat /dev/stderr
, karena ketiga penjelas file ini terhubung ke file yang sama: ia memberitahu cat
untuk membaca dari terminal. Itulah yang cat
tanpa argumen juga.
Jika Anda berlari cat /dev/stdout >foo
, maka /dev/stdout
akan merujuk ke file foo
- perintah itu setara dengan cat foo >foo
. Bergantung pada cat
implementasinya, mungkin kesalahan keluar (versi GNU mengeluh bahwa "file input adalah file output"), atau mungkin tidak melakukan apa-apa karena membaca dari file foo
yang kosong ( >foo
hanya terpotong). Dengan versi cat
yang tidak mendeteksi kasus khusus ini, jika foo
tidak kosong, maka cat /dev/stdout >>foo
atau yang setara cat foo >>foo
akan menambahkan konten file ke dirinya sendiri tanpa batas.
Ketika Anda menjalankan vim /dev/stdout
, itu mengeluh karena tidak tahu cara mengedit terminal (itu tidak masuk akal).