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?


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.


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.


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]”).


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.