/ Dev / null dosyasının gerçekte sabit bir boyutu var mı?


23

Bunun /dev/nullbir dosya olduğunu ve bir dizin olmadığını öğrendim .

Sadece gerçek bir dosya boyutuna sahip olup olmadığını merak ediyorum.

Yanıtlar:


35

/dev/nullgerçekten bir dosya değil. Bu bir karakter cihazı !

$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Apr 10 09:53 /dev/null

cİzin dizesinin ilk harfi ( crw-rw-rw-) bunu gösterir. Normal dosyalar için -bunun yerine olur.

Yani kolay bir deyişle: /dev/nullbir dosya değil, dosya sistemindeki bu yolla eşlenen sanal bir cihazdır.
Yine de girdi olarak kullanılabilir, daha sonra boş bir dosya gibi davranır (boyut 0) ve hemen bir EOF (Dosya Sonu) döndürür.

Bu nedenle /dev/null, belirli bir dosya boyutuna sahip olduğunu söyleyemezsiniz , çünkü herhangi bir depolama ortamında normal bir dosya değildir.


Giriş? NUL karakterlerinin sonsuz bir listesini ne sağlar?
Jonathon

@JonathonWisnoski Tam olarak bilmiyorum ve hiç bu şekilde kullanmamıştım, bu yüzden size bu linki StackOverflow ile ilgili açıklandığı bir soruya verebilirim .
Byte Commander

7
@JonathonWisnoski, hayır - girişte sıfır boyutlu bir dosya gibi davranır, böylece ilk okunan dosya dosyanın EOF konumunda olduğunu bildirir.
godlygeek

Evet, doğru.
godlygeek

3
@JonathonWisnoski bunun için / dev / zero değerine bakın.
Paŭlo Ebermann

16

/dev/null" aygıt dosyası " adı verilen özel bir dosya türüdür .

Aygıt dosyaları, bazı çekirdek işlevlerine arabirim görevi görür. Yalnızca bir dizin girişi için gereken alanı kaplarlar (" inode ") ancak gerçek bir içeriği yoktur ve gerçek bir dosya boyutu yoktur.

Diğer aygıt dosyaları örneğin /dev/sda(genellikle bir HDD veya SSD), /dev/zero(okunduğunda sıfır üreten bir dosya) veya /dev/random(okunduğunda rasgele veri üreten bir dosya). Aslında, tüm dosyalar hakkında /dev/cihaz dosyaları veya cihaz dosyalarına işaret eden bağlantılar bulunur.


Bu cevabın çoğunu doğru bulurken (+1), inode girişinin büyüklüğünü işgal ettiğini söylemek biraz yanıltıcı olduğunu düşünüyorum. Disk alanına atıfta bulunurken herhangi bir yer işgal etmiyorlar ya da bütün uygulamalarına karakter aygıtı olarak atıfta bulunurlarsa daha fazlasını alıyorlar.
kos

2
Diğer tüm dosyalar gibi bir aygıt dosyası da sahibini, izinleri, büyük / küçük sayıları ve diğer meta verileri depolayan bir inode'a ihtiyaç duyar. Bu dosya dosyalarının nasıl ve nerede depolandığına (istediğiniz mknodyerde cihaz dosyaları oluşturmak için kullanabilirsiniz ) bağlıdır. /dev/İnode gibi sanal dosya sistemleri için disk alanı değil bellek yeterlidir.
Florian Diesch

Kesinlikle. Sanırım kendimi iyi ifade etmedim, bu yüzden tekrar ifade etmeme izin verin. Belki de işaret ettiğim şey biraz seçici, bu yüzden beni affet. Demek istediğim, eğer her bir karakter cihazının inode girişi nedeniyle bellekte bir miktar yer tuttuğunu belirtirseniz, belki de bunlarla birlikte yüklenen bu tür bir cihaza okuma / yazma üzerine çağrılacak fonksiyonlara dikkat çekmek istediğinizi belirtin. bu yüzden de.
kos

Bir dosyanın inode table girişi tarafından kaplanan alanı kapladığını söylemek doğru mudur? Bunun genellikle insanların - ve yazılım insanların yazdıkları - dosya boyutu hakkında konuşurken ne anlama geldiklerini içerdiğini sanmıyorum. Özellikle, 0 gibi ya da verimi olan özel bir cihazın boyutunu sormak lsve duraporlamak/dev/null/dev/random .
Eliah Kagan

Üzgünüm, ama bu cevabı reddettim, çünkü birisi söylediklerim konusunda yanlış olduğumu kanıtlamadıkça (ki olabilir), hala bir karakter cihazının inode girişinin alanını işgal ettiğini belirtmenin doğru olmadığını düşünüyorum.
kos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.