Jak powstaje / dev / zero i jak mogę tworzyć warianty takie jak / dev / one?

7

Czytam mknodstronę podręcznika , która jest (o ile mogę powiedzieć) tym, czego byś użył, aby stworzyć urządzenie postaci /dev/zero, ale nie widzę, jak byś go dostał, aby uzyskać nieskończony strumień zer bitów (lub inny wzorzec ). Jaka jest procedura tworzenia takich urządzeń postaci?

Blacklight Shining
źródło
Są zaimplementowane w jądrze. Spójrz na zero_lseek, read_zero, write_zero, mmap_zerow drivers/char/mem.c.
David Schwartz
Och… więc musiałbym zmodyfikować jądro?
Blacklight Shining
3
Niekoniecznie zależy to dokładnie od tego, co chcesz zrobić. Najprawdopodobniej będziesz musiał przynajmniej zaimplementować moduł.
David Schwartz
Co /dev/one?
Blacklight Shining

Odpowiedzi:

3

Wszystko mknodto wiąże plik urządzenia ze sterownikiem urządzenia. Istnieją sterowniki urządzeń, które implementują interakcję z rzeczywistymi urządzeniami, i istnieją sterowniki urządzeń, które po prostu reagują na żądania odczytu i zapisu w użyteczny sposób. Jeśli chcesz, możesz usiąść i napisać sterownik, który zwraca słowa Star Spangeled Banner . Ale to kwestia kodowania, nie znajdowania odpowiednich argumentów mknod.

Izaak Rabinowicz
źródło
4

mknodtworzy węzeł urządzenia, ale VFS wykrywa dostęp do węzła urządzenia i przekierowuje je do odpowiedniego sterownika w jądrze w celu obsługi. Wszystkie węzły urządzeń, od /dev/nullcelu /dev/sdXdo /dev/ttyXXcelu /dev/videoXsą traktowane w ten sposób.

Ignacio Vazquez-Abrams
źródło
0

Jeśli chcesz po prostu odtworzyć /dev/zerozdolności, ale z postacią inną niż zero / null, możesz użyć, traby zmienić wszystkie zera („\ 000” w liczbach ósemkowych) na coś innego.

Aby na przykład wypluć niekończący się strumień „a”, możesz:

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

Lub pomiń kota i uzyskaj wartość M (1024 * 1024) za pomocą

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

„\ 141” jest znakiem „a”.

Zobacz tę stronę http://www.asciitable.com/, aby uzyskać szybką krótką stronę ASCII - kody ósemkowe. To właściwie ten obraz tutaj:
wprowadź opis zdjęcia tutaj

(Wiem, stare „rozwiązane” pytanie, ale znalazłem je, szukając nieskończonego strumienia różnych znaków, więc to „rozwiązuje” problem „jak zrobić / dev / one lub / dev / [inny znak]”).

Xen2050
źródło
Nie wiem… w oparciu o nienaukowe, które właśnie wypróbowałem, head | tr >filema różne poziomy kosztów ogólnych. W zależności od systemu zajmuje to jeden, półtora lub dwa razy tyle, ile tylko head >file.
Blacklight Shining
Tak więc, tr to chyba koń roboczy. Próbowanie head -c 3G ... > /dev/nullzajęło mniej niż sekundę, ale dodanie fajki trzajęło 21 sekund. Nadal około 150 Mb / s, więc prawdopodobnie szybciej niż większość dysków twardych może nadążyć. Ale to działa i nie ma wbudowanego / dev / one lub / dev / a itp.
Xen2050
Stąd moje pytanie po jednym!
Blacklight Shining