Wie wird / dev / zero erstellt und wie kann ich Varianten wie / dev / one erstellen?

6

Ich habe die mknodManpage gelesen , die (soweit ich das beurteilen kann) beschreibt, wie Sie ein Zeichengerät herstellen würden /dev/zero, aber ich verstehe nicht, wie Sie es dazu bringen würden, einen unendlichen Strom von Null-Bits (oder ein anderes Muster) zu erhalten ). Wie wird vorgegangen, um solche Zeichengeräte zu erstellen?

Schwarzlicht scheint
quelle
Sie sind im Kernel implementiert. Schauen Sie sich zero_lseek, read_zero, write_zero, mmap_zeroin drivers/char/mem.c.
David Schwartz
Oh ... also müsste ich den Kernel modifizieren?
Blacklight Shining
3
Nicht unbedingt, es kommt genau darauf an, was Sie tun möchten. Höchstwahrscheinlich müssten Sie zumindest ein Modul implementieren.
David Schwartz
Was ist /dev/one?
Blacklight Shining

Antworten:

3

Sie mknodmüssen lediglich eine Gerätedatei mit einem Gerätetreiber verknüpfen. Es gibt Gerätetreiber, die die Interaktion mit tatsächlichen Geräten implementieren, und es gibt Gerätetreiber, die auf nützliche Weise nur auf Lese- / Schreibanforderungen reagieren. Wenn Sie möchten, können Sie sich hinsetzen und einen Treiber schreiben, der den Text des Star Spangeled Banners zurückgibt . Aber es ist eine Frage der Codierung, nicht die richtigen Argumente zu finden mknod.

Isaac Rabinovitch
quelle
4

mknoderstellt den Geräteknoten, aber das VFS erkennt Zugriffe auf den Geräteknoten und leitet sie zur Bearbeitung an den entsprechenden Treiber im Kernel weiter. Alle Geräteknoten, von /dev/nullbis /dev/sdXzu /dev/ttyXXzu /dev/videoXwerden auf diese Weise behandelt.

Ignacio Vazquez-Abrams
quelle
0

Wenn Sie nur die /dev/zeroFähigkeiten neu erstellen möchten, aber ein anderes Zeichen als null / null haben, können Sie tralle Nullen ("\ 000" im Oktal) in etwas anderes ändern.

So können Sie zum Beispiel einen endlosen Strom von "a" ausspucken:

cat /dev/zero | tr "\000" "\141" | head -c 20
aaaaaaaaaaaaaaaaaaaa

Oder überspringen Sie die Katze und geben Sie einen M-Wert (1024 * 1024) mit aus

head -c 1M /dev/zero |tr "\000" "\141"

"\ 141" ist das "a" -Zeichen.

Auf dieser Website unter http://www.asciitable.com/ finden Sie eine kurze Seite mit ASCII-Oktalcodes. Es ist eigentlich das Bild hier:
Bildbeschreibung hier eingeben

(Ich weiß, alte "gelöste" Frage, aber ich habe sie gefunden, als ich nach einem endlosen Strom verschiedener Zeichen gesucht habe. Das "löst" also das Problem "wie man / dev / one oder / dev / [verschiedene Zeichen] macht".)

Xen2050
quelle
Ich weiß nicht ... basierend auf unwissenschaftlichen Informationen, die ich gerade ausprobiert habe, head | tr >fileist der Overhead unterschiedlich hoch . Je nach System dauert dies entweder ein, eineinhalb oder zwei Mal so lange head >file.
Blacklight Shining
Es ist also ein Arbeitstier, denke ich. Der Versuch head -c 3G ... > /dev/nulldauerte weniger als eine Sekunde, aber das Hinzufügen der Pfeife trdauerte 21 Sekunden. Immer noch ungefähr 150 MB / s, also wahrscheinlich schneller als die meisten Festplatten. Aber es funktioniert, und es gibt keine eingebauten / dev / one oder / dev / a, etc.
Xen2050
Daher meine Frage nach einem!
Blacklight Shining