
На этой неделе у меня был экзамен, и одним из вопросов был (с одним правильным ответом):
Имя файла может содержать символ:
а)
\
б)
/
в)
?
г)
!
Я выбрал, c) ?
потому что мне это показалось правильным. Когда я пришел домой, я проверил это на своей машине (Ubuntu 14.04), и файл был успешно создан. В калькуляторе готовности правильный ответ отмечен как d) !
.
Я знал, что экзамен посвящен Windows, но в тестовом задании платформа не была указана.
Понятно, что символы \
и /
не поддерживаются в имени файла,НОесть ли способ заставить операционную систему разрешить их?
Было бы очень здорово доказать, что поддерживаются даже символы \
и ./
решение1
При рассмотрении символов, разрешенных в имени файла, есть два ограничивающих фактора — ограничения, связанные с операционной системой, и ограничения, связанные с файловой системой. Для этого вопроса я предположу, что мы говорим о последних версиях Linux и ext4.
Linux запрещает только два символа в именах файлов: /
, поскольку это разделитель пути, и \0
(ASCII NUL), поскольку он завершает cstrings. В дополнение к этому, специальные имена .
и ..
также зарезервированы файловой системой для использования в качестве навигационных жестких ссылок.
Вы можете легко доказать, что другие символы, упомянутые в вашем вопросе, разрешены:
$ touch '\' '?' '!'
$ ls
! ? \