Tôi có một thời gian khó hiểu làm thế nào mã hóa tên tập tin hoạt động. Trên unix.SE tôi thấy giải thích mâu thuẫn.
Tên tệp được lưu trữ dưới dạng ký tự
Để trích dẫn câu trả lời khác: Một số câu hỏi về mã hóa ký tự hệ thống tệp trên linux
[V]] như bạn đã đề cập trong câu hỏi của mình, tên tệp UNIX chỉ là một chuỗi các ký tự; hạt nhân không biết gì về mã hóa, hoàn toàn là một khái niệm không gian người dùng (tức là cấp độ ứng dụng).
Nếu tên tệp được lưu trữ dưới dạng ký tự, thì phải có một số loại mã hóa liên quan, vì cuối cùng tên tệp phải kết thúc dưới dạng chuỗi bit hoặc byte trên đĩa. Nếu người dùng có thể chọn bất kỳ mã hóa nào để ánh xạ các ký tự thành chuỗi byte được đưa vào kernel, có thể tạo bất kỳ chuỗi byte nào cho tên tệp hợp lệ.
Giả sử như sau: Một người dùng sử dụng mã hóa X ngẫu nhiên , dịch tệp này foo
thành chuỗi byte α và lưu nó vào đĩa. Một công dụng sử dụng mã hóa Y . Trong mã hóa này, α dịch sang /
, không được phép dưới dạng tên tệp. Tuy nhiên, đối với người dùng đầu tiên, tệp này là hợp lệ.
Tôi cho rằng kịch bản này không thể xảy ra.
Tên tệp được lưu trữ dưới dạng các đốm nhị phân
Để trích dẫn một câu trả lời khác: Mã hóa bộ ký tự nào được sử dụng cho tên tệp và đường dẫn trên Linux?
Như những người khác lưu ý, thực sự không có câu trả lời cho điều này: tên tệp và đường dẫn không có mã hóa; HĐH chỉ xử lý chuỗi byte. Các ứng dụng riêng lẻ có thể chọn giải thích chúng là được mã hóa theo một cách nào đó, nhưng điều này khác nhau.
Nếu hệ thống không xử lý các ký tự, làm thế nào các ký tự cụ thể (ví dụ /
hoặc NULL
) bị cấm trong tên tệp? Không có khái niệm về việc /
không có mã hóa.
Một lời giải thích là hệ thống tệp có thể lưu trữ tên tệp chứa bất kỳ
ký tự nào và chỉ có các chương trình người dùng có mã hóa vào tài khoản sẽ gây nghẹt thở cho tên tệp chứa các ký tự không hợp lệ. Điều đó, có nghĩa là các hệ thống tệp và kernel có thể, không gặp khó khăn gì, xử lý các tên tệp chứa a /
.
Tôi cũng cho rằng điều này là sai.
Việc mã hóa diễn ra ở đâu và hạn chế được đặt ra là không cho phép các ký tự cụ thể ở đâu?