Saya mengalami kesulitan memahami cara kerja pengkodean nama file. Pada unix.SE saya menemukan penjelasan yang bertentangan.
Nama file disimpan sebagai karakter
Mengutip jawaban lain: Beberapa pertanyaan tentang pengkodean karakter sistem file di linux
[...] seperti yang Anda sebutkan dalam pertanyaan Anda, nama file UNIX hanyalah serangkaian karakter; kernel tidak tahu apa-apa tentang pengkodean, yang seluruhnya merupakan konsep ruang pengguna (yaitu, level aplikasi).
Jika nama file disimpan sebagai karakter, harus ada semacam pengkodean, karena akhirnya nama file harus berakhir sebagai urutan bit atau byte pada disk. Jika pengguna dapat memilih pengodean apa pun untuk memetakan karakter ke urutan byte yang diumpankan ke kernel, dimungkinkan untuk membuat urutan byte apa pun untuk nama file yang valid.
Asumsikan sebagai berikut: Pengguna menggunakan pengodean acak X , yang menerjemahkan file foo
ke dalam urutan byte α dan menyimpannya ke disk. Lain penggunaan pengguna encoding Y . Dalam encoding ini α diterjemahkan menjadi /
, yang tidak diizinkan sebagai nama file. Namun, untuk pengguna pertama file tersebut valid.
Saya berasumsi bahwa skenario ini tidak dapat terjadi.
Nama file disimpan sebagai gumpalan biner
Mengutip jawaban lain: Pengkodean charset apa yang digunakan untuk nama file dan jalur di Linux?
Seperti dicatat oleh orang lain, sebenarnya tidak ada jawaban untuk ini: nama file dan jalur tidak memiliki penyandian; OS hanya menangani urutan byte. Aplikasi individual dapat memilih untuk menafsirkannya sebagai dikodekan dalam beberapa cara, tetapi ini bervariasi.
Jika sistem tidak berurusan dengan karakter, bagaimana bisa karakter tertentu (misalnya /
atau NULL
) dilarang dalam nama file? Tidak ada gagasan tentang /
tanpa pengkodean.
Penjelasannya adalah bahwa sistem file dapat menyimpan nama file yang mengandung
karakter apa pun dan hanya program pengguna yang memasukkan pengkodean ke dalam akun yang akan mencekik nama file yang mengandung karakter yang tidak valid. Itu, pada gilirannya, berarti bahwa sistem file dan kernel dapat, tanpa kesulitan, menangani nama file yang mengandung a /
.
Saya juga berasumsi bahwa ini salah.
Di mana pengkodean berlangsung dan di mana batasan yang diajukan tidak mengizinkan karakter tertentu?