Ho difficoltà a capire come funziona la codifica del nome file. Su unix.SE trovo spiegazioni contraddittorie.
I nomi dei file sono memorizzati come caratteri
Per citare un'altra risposta: diverse domande sulla codifica dei caratteri del file system su Linux
[…] Come menzioni nella tua domanda, il nome di un file UNIX è solo una sequenza di caratteri; il kernel non sa nulla della codifica, che è interamente un concetto di spazio utente (cioè a livello di applicazione).
Se i nomi dei file sono memorizzati come caratteri, deve esserci un qualche tipo di codifica, poiché alla fine il nome del file deve finire come una sequenza di bit o byte sul disco. Se l'utente può scegliere qualsiasi codifica per mappare i caratteri su una sequenza di byte che viene inviata al kernel, è possibile creare qualsiasi sequenza di byte per un nome file valido.
Supponiamo quanto segue: un utente utilizza una codifica casuale X , che traduce il file foo
nella sequenza di byte α e lo salva su disco. Altri usi utente codificante Y . In questa codifica α si traduce in /
, che non è consentito come nome file. Tuttavia, per il primo utente il file è valido.
Presumo che questo scenario non possa accadere.
I nomi dei file vengono archiviati come BLOB binari
Per citare un'altra risposta: quale codifica set di caratteri viene utilizzata per nomi di file e percorsi su Linux?
Come notato da altri, non c'è davvero una risposta a questa: nomi di file e percorsi non hanno una codifica; il sistema operativo si occupa solo della sequenza di byte. Le singole applicazioni possono scegliere di interpretarle come codificate in qualche modo, ma questo varia.
Se il sistema non tratta i caratteri, come possono essere vietati caratteri particolari (ad es. /
O NULL
) nei nomi dei file? Non esiste la nozione di a /
senza codifica.
Una spiegazione sarebbe che il file system può memorizzare nomi di file contenenti qualsiasi
carattere ed è solo i programmi utente che tengono conto di una codifica che soffocano sui nomi di file contenenti caratteri non validi. Ciò, a sua volta, significa che i file system e il kernel possono, senza alcuna difficoltà, gestire nomi di file contenenti a /
.
Presumo anche che sia sbagliato.
Dove avviene la codifica e dove si pone la restrizione di non consentire caratteri particolari?