Ich habe die mknod
Manpage 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?
6
zero_lseek
,read_zero
,write_zero
,mmap_zero
indrivers/char/mem.c
./dev/one
?Antworten:
Sie
mknod
mü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 findenmknod
.quelle
mknod
erstellt 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/null
bis/dev/sdX
zu/dev/ttyXX
zu/dev/videoX
werden auf diese Weise behandelt.quelle
Wenn Sie nur die
/dev/zero
Fähigkeiten neu erstellen möchten, aber ein anderes Zeichen als null / null haben, können Sietr
alle Nullen ("\ 000" im Oktal) in etwas anderes ändern.So können Sie zum Beispiel einen endlosen Strom von "a" ausspucken:
Oder überspringen Sie die Katze und geben Sie einen M-Wert (1024 * 1024) mit aus
"\ 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:
(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".)
quelle
head | tr >file
ist der Overhead unterschiedlich hoch . Je nach System dauert dies entweder ein, eineinhalb oder zwei Mal so langehead >file
.head -c 3G ... > /dev/null
dauerte weniger als eine Sekunde, aber das Hinzufügen der Pfeifetr
dauerte 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.