Come altri utenti hanno già spiegato in dettaglio, i file speciali richiedono il codice per eseguirne il backup. Tuttavia, nessuno sembra aver menzionato che Linux offre diversi modi per scrivere quel codice nello spazio utente:
A. FUSE (Filesystem in USErspace) ti permette di scrivere qualcosa come /proc
senza il rischio di crash del kernel e farlo in una lingua / runtime a tua scelta, come Go , Node.js , Perl , PHP , Python , Ruby , Rust , ecc .
Ha anche il vantaggio che i filesystem FUSE possono essere montati senza sudo
perché funzionano come l'utente che esegue il montaggio.
Ecco alcuni esempi di cose che le persone hanno scritto usando FUSE:
- mp3fs (Visualizza i tuoi file FLAC come file MP3 che vengono creati al volo quando li copi / fai clic e li trascini sul tuo lettore MP3)
- PyTagsFS (Visualizza i tuoi file multimediali in un albero di cartelle virtuali create dai tag dei metadati)
- fuse-zip (Montare i file Zip come cartelle)
- FuseISO (montare ISO senza permessi di root)
- iFUSE (Montare iDevices)
- FuseDAV (montare condivisioni WebDAV)
- fuse-exfat (Montare filesystem formattati exFAT)
- ntfs-3g ( il driver NTFS Linux)
B. Se vuoi creare un dispositivo di input virtuale come tastiera, mouse, joystick, ecc. (Es. Per scrivere un driver libusb
di spazio utente per un dispositivo USB con cui stai parlando ), c'è uinput .
I collegamenti per questo sono più difficili da trovare, ma so che esistono per Go (solo tastiera), Python e Ruby (2) .
Esempi di utilizzo di uinput nel mondo reale includono:
- G15Daemon (driver Linux per LCD e tasti di gioco sulle tastiere da gioco Logitech G15)
- ds4drv (Driver per controller Sony DualShock 4)
- xboxdrv ( driver alternativo del controller XBox 360 e Linux equivalente a x360ce giochi così mal progettati come Runner2: Future Legend of Rhythm Alien può pensare che stiano parlando con un vero controller XBox quando non lo sono)
- I vecchi driver Wiimote come cwiid erano richiesti prima che qualcuno finalmente scrivesse un driver Wiimote del kernel in modo che il supporto fosse disponibile di default.
C. Per i dispositivi a caratteri generici, c'è CUSE (Dispositivi a caratteri in USErspace). È molto meno popolare però.
L'unico utente delle API CUSE che io sono personalmente a conoscenza è lo stesso programma che ha spinto la sua creazione: osspd , che implementa /dev/dsp
, /dev/adsp
e /dev/mixer
(l'API audio OSS) nello spazio utente in modo che possano essere instradati attraverso PulseAudio o dmix.
L'unico legame CUSE che sono riuscito a trovare è cusepy , che non è stato aggiornato dal 2010.
D. Potrebbe non essere necessario un nuovo file speciale.
Ad esempio, è possibile aprire una comunicazione non elaborata con qualsiasi dispositivo USB utilizzando libusb (Elenco di associazioni nella pagina) e quindi comunicare con altri programmi tramite altri meccanismi (socket TCP / UDP, lettura / scrittura di stdin / stdout o file regolari su disco , eccetera.).