Sadece "Dosyanın sonundaki yeni satır karakterini kaldırma" yanıtlarını okudum ve herkes son karakteri silmeyi söyledi. Sorum şu: son karakter değil mi?
Sadece "Dosyanın sonundaki yeni satır karakterini kaldırma" yanıtlarını okudum ve herkes son karakteri silmeyi söyledi. Sorum şu: son karakter değil mi?
Yanıtlar:
Önceki yanıtlar doğru şekilde belirtildiği için bir dosya Dosya Sonu karakteriyle bitmiyor. Ama cevapların ve yorumların belirtmeye değer bazı yanlışlıklar içerdiğini düşünüyorum:
ASCII karakter kümesi tam bir EOF karakteri içermiyor. Birkaç "son" kontrol karakteri vardır: Metin Sonu (3), İletim Sonu (4), İletim Sonu Bloğu (23), Orta Sonu (25). Dosya Ayırıcı (28) belki bir EOF karakterine en yakın gelir. Kod 26, EOF değil, "Yedek" tir.
Ctrl- Dsadece terminal girişi ile ilişkilidir. Örneğin komut
cat filea fileb filec > outfile
içermez Ctrl- D. Bu arada, daha başka bir şeye terminali EOF karakterini değiştirebilir Ctrl- Dkullanarak stty
komut.
Açıkçası, Ctrl- D(veya değiştirdiğiniz her şey) bir EOF anahtar kodu değildir. Yaptığı şey, read
sistem çağrısının kullanılabilir olan girişle geri dönmesini sağlamaktır, tıpkı dönüş tuşuna basmak gibi, okuma sistemi çağrısını arayan kişiye bir karakter satırı döndürür. Geleneksel olarak , okuma sistemi çağrısı (yani sıfır karakter okuma) sıfıra kadar bir geri dönüş değeri dosya bir durumun sonuna işaret eder. Ancak, giriş dosyası otomatik olarak kapatılmaz ve giriş uçbirimden geliyorsa, "dosya sonu" durumuna getirilmez. "Dosya sonu" ndan sonra bile terminalden okumaya devam eden bir program yazabilirsiniz ve okuma çağrısı bir sonraki giriş satırı için sıfırdan farklı olabilir.
Satırda zaten bir girdi yazıldığında Ctrl- Dtuşuna basılırsa eof ve eol karakterleri arasındaki benzerlik görülebilir . Örneğin, "abc" yazarsanız ve tuşuna basarsanız Ctrl- Dokuma çağrısı geri döner, bu kez 3 dönüş değeri ve tamponda saklanan "abc" ile argüman olarak iletilir. Okuma 0 döndürmediği için, yukarıdaki kural uyarınca EOF koşulu olarak yorumlanmaz. Benzer şekilde, geri dönmek için tuşuna basıldığında, okunan çağrı tüm giriş satırıyla (satırsonu dahil) geri döner. Sen ile bu deneyebilir cat
komutu: hat ve basın üzerindeki bazı karakterler yazma Ctrl- D. Karakterlerin size geri döndüğünü ve cat
daha fazla girdi beklediğini göreceksiniz .
Yukarıdakilerin tümü, hat girişi işleminin en aza indirildiği "ham" modun aksine, terminal "pişmiş" moddayken geçerlidir. Ham modda, giriş arabelleğine gerçekten bir Ctrl-D karakteri verilir.
ASCII kontrol karakterleri 1960'lardan tanımlara sahiptir (aslında bir ağ olarak düşünebileceğiniz şeyden önce ). Bu kontrol karakterlerinin tümü, o zamanlar telekomünikasyon ekipmanı için tanımlandıkları şekilde kullanılmaz.
Unix benzeri sistemlerde, bir EOF
karaktere gerek yoktur ; hiçbiri kullanılmaz. Sistem uygulamalara bir dosyada kaç bayt olduğunu söyleyebilir:
Diğer bazı sistemlerde (VMS, DOS, Windows'da görülür), bir kontrol Z dosya sonu işareti olarak işlev görebilir, çünkü eski sürümlerde sistem bazı uygulamalarda dosyada kaç bayt olduğunu söyleyememiştir.
VMS durumunda, sınırlama C çalışma zamanının çalışma şeklinden kaynaklanıyordu. Montaj dili uygulamaları doğru dosya boyutunu alabilir (ve edinebilir).
Unix sistemleri kabuk geleneksel girişi (dosyası) bir uç ulaşıldı, fakat kontrol-D dosyasında kayıtlı ilişkin bir uygulama anlatmak için kontrol D kullanın.
C'de, EOF
bilerek -1
geçerli bir karakter olmadığını belirtmek için yapılır . EOF
Bir dosya sonu koşulu algılandığında standart G / Ç geri döner - özel bir karakter değil.
Bu arada, dosyaların yeni satır (ASCII satır besleme) karakteriyle bitmesi gerekmez . Metin editörleri, tümü yazdırılabilir metin olan ancak sondaki satır sonu olmayan dosyalarla başa çıkabilir.
busybox
's vi
, vb. gibi minimum editörler ).
EOF bir karakter değil. Bir dosya akışından okunacak başka karakter olmadığını gösteren bir durumdur. Terminalden EOF komutunu girdiğinizde, işletim sistemine özel bir karakter koymak yerine giriş akışını kapatması için sinyal verirsiniz.
bash
Ellerini girişe almadan önce TTY sürücüsü tarafından masaj yapılır. Bu sürücü Ctrl-D'yi durdurur ve bash
(EOF'un bir karakter değil, özel bir dosya durumu olduğu yerlerde) bir EOF gönderir