Я только что столкнулся со следующим вопросом в среде программирования Unix , классической книге Кернигана и Пайка о Unix (ниже я нашел текст на стр. 79 издания 1984 года, ISBN: 0-13-937699-2):
Упражнение 3-6. (Вопрос с подвохом) Как вы вводите / в имя файла (т. Е. /, Который не разделяет компоненты пути?
Я много лет работал с Linux, как конечный пользователь, так и программист, но я не могу ответить на этот вопрос. Там нет никакого способа поставить косую черту в именах файлов, это абсолютно запрещено ядром. Вы можете исправить вашу файловую систему с помощью доступа к блочному устройству или использовать похожие символы из Юникода, но это не решения.
Я понимаю, что Linux ≠ Unix, но должен применяться тот же принцип, поскольку система должна иметь возможность однозначно извлекать иерархию каталогов из путей.
Кто-нибудь знает, о чем думали Керниган и Пайк, задавая эти вопросы? Какой был предполагаемый ответ? Что именно «трюк»? Или, может быть, оригинальная система Unix просто позволила избежать этой косой черты?
UPD:
Я связался с Брайаном Керниганом по этому вопросу, и он ответил:
Ответ (или был) «Вы не можете».
Следовательно, Тимоти Мартин был прав и получает зеленую галочку.
источник
a
и заставить вашу систему думать, что файловая система находится в локали EBCDIC? ASCIIa
равен 0x61, что соответствует/
EBCDIC (кодовая страница 37)Ответы:
Возможно, ответ такой же, как часть ответа на этот вопрос с подвохом:
как вы спускаетесь со слона? Вы не Вы получаете это от гуся.
Из «Практики программирования» Брайана В. Кернигана и Роба Пайка, гл. 6, стр. 158:
источник
Я сделал это Это было в системе UNIX, работающей на PDP-11 где-то в 1980 году. Я создал файл под названием «WhatXNow?». Затем я использовал двоичный файл «редактор», чтобы отредактировать устройство на диске и изменить «X» на «/» в inode (с отключенной файловой системой).
Пострадавший так и не понял, как его убрать.
Редактировать: упс, Бармар прав, я не смог увидеть строку о том, что я не исправляю устройство. И да, это был каталог, который я редактировал, а не индекс. Прошло много времени :-)
источник
fsck
что удалил бы это.Любой сценарий , где
/
(точнее, байты-не символ-со значением 0x2F, почти все ядра Unix намеренно не обращая внимания на кодировку символов) находит свой путь в запись каталога, без необработанных блоков диска , имеющие манипулируют вручную, бесспорно ошибка в ядре.Такие ошибки случаются время от времени. Я помню, как читал заметки о патче, что некоторые итерации эпохи 1990-х годов… я хочу сказать Solaris, но это может быть неправильно… предложили сервер для протокола AppleTalk Filing Protocol (AFP), который был классическим эквивалентом NFS для MacOS , Беда была в том, что на классических MacOS вы можете
/
использовать компонент pathname;:
вместо этого используется разделитель каталогов . Сервер AFP должен был выполнять моральный эквивалентtr :/ /:
при сопоставлении имен файлов, представленных клиентами, с файлами на его диске, но они пропустили несколько путей кода, и поскольку сервер был реализован внутри ядра, он мог фактически записывать неверные записи каталога.(См. Comp.unix FAQ # 2.2 , подраздел, начинающийся с «Что если в имени файла есть символ« / »?», Для более длинной версии выше.)
источник