(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/stdoutdapat 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/stdoutdan 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/stdinatau cat /dev/stderr, karena ketiga penjelas file ini terhubung ke file yang sama: ia memberitahu catuntuk membaca dari terminal. Itulah yang cattanpa argumen juga.
Jika Anda berlari cat /dev/stdout >foo, maka /dev/stdoutakan merujuk ke file foo- perintah itu setara dengan cat foo >foo. Bergantung pada catimplementasinya, mungkin kesalahan keluar (versi GNU mengeluh bahwa "file input adalah file output"), atau mungkin tidak melakukan apa-apa karena membaca dari file fooyang kosong ( >foohanya terpotong). Dengan versi catyang tidak mendeteksi kasus khusus ini, jika footidak kosong, maka cat /dev/stdout >>fooatau yang setara cat foo >>fooakan 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).