(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/stdout
ve 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/stdin
veya cat /dev/stderr
bu üç dosya tanımlayıcıları aynı dosyaya bağlı olduğumuzdan: o söyler cat
terminalinden okumak için. Yani ne cat
hayır argüman ile çok yapar.
Eğer koştuysanız cat /dev/stdout >foo
, /dev/stdout
dosyaya atıfta bulunursunuz foo
- bu komut eşdeğerdir cat foo >foo
. Uygulamaya bağlı olarak cat
hata verebilir (GNU sürümü “girdi dosyasının çıktı dosyası” olduğundan şikayet eder) veya foo
boş olan dosyadan okuduğu için (hiçbir şey kesilmez) hiçbir şey yapamaz >foo
. Bunun bir sürümü cat
bu özel durumu algılamazsa, foo
boş değilse, o zaman cat /dev/stdout >>foo
veya eşdeğeri cat foo >>foo
dosyanı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).