(Neredeyse) her şey bir dosyadır, ancak her şey normal bir dosya değildir. Dizin, ağ soketi, seri bağlantı noktası vb.Gibi özel bir dosyada metin düzenleyiciyi çağırmak mantıklı değildir.
Dosya /dev/stdout, unix değişkenine bağlı olarak birkaç şeyden biri olabilir:
- “özel” bir dosya, tipik olarak bir karakter cihazı;
- erişen işlemin bu tanımlayıcıda açık olduğu dosyayı gösteren “sihirli” sembolik bir bağlantı;
- yukarıdakilerden birine sembolik bir bağlantı.
Her durumda, açılış /dev/stdoutve benzeri dosyalar, uygulamanın dosya tanımlayıcı 1'de zaten açık olduğu aynı dosyayla ilişkili yeni bir dosya tanımlayıcı oluşturur. "Standart çıktı", dosya tanımlayıcı 1 anlamına gelir ve bu dosya tanımlayıcısının kullanıldığı yalnızca bir kuraldır çıktı için - çekirdek umursamaz.
Terminalde bir program çalıştırdığınızda, üç standart tanımlayıcının tümü (0 = standart giriş, 1 = standart çıkış, 2 = standart hata) terminal aygıtında açılır. Bu cihazdan okumak, kullanıcı tarafından yazılan karakterleri döndürür ve o cihaza yazmak terminal penceresinde metin görüntüler. (Bir terminal cihazı göz önüne alındığında, gösterdiği çıkışı okumak veya içine veri enjekte etmek için standart bir yol yoktur.)
Eğer çalıştırdığınızda cat /dev/stdout, bu tam olarak aynı şeyi yapar cat /dev/stdinveya cat /dev/stderrbu üç dosya tanımlayıcıları aynı dosyaya bağlı olduğumuzdan: o söyler catterminalinden okumak için. Yani ne cathayır argüman ile çok yapar.
Eğer koştuysanız cat /dev/stdout >foo, /dev/stdoutdosyaya atıfta bulunursunuz foo- bu komut eşdeğerdir cat foo >foo. Uygulamaya bağlı olarak cathata verebilir (GNU sürümü “girdi dosyasının çıktı dosyası” olduğundan şikayet eder) veya fooboş olan dosyadan okuduğu için (hiçbir şey kesilmez) hiçbir şey yapamaz >foo. Bunun bir sürümü catbu özel durumu algılamazsa, fooboş değilse, o zaman cat /dev/stdout >>fooveya eşdeğeri cat foo >>foodosyanın içeriğini süresiz olarak kendisine ekler.
Çalıştırdığınızda vim /dev/stdout, bir terminalin nasıl düzenleneceğini bilmediği için şikayet ediyor (bu sadece mantıklı değil).