Функция open(2)
является просто оболочкой для системного вызова open
и не делает ничего другого, кроме помещения аргументов в правильные регистры, выполнения системного вызова и получения его возвращаемого значения.
А ядро вообще не знает и не заботится о локалях.
В частности, в аргументе path
open(2)
единственными байтами, имеющими особое значение, являются 47 (/
), которые разделяют элементы пути, и 0 (байт NUL), который его завершает.
Ни ядро, ни большинство файловых систем не помешают вам создавать файлы с искаженными именами utf-8 или любым двоичным мусором - для ядра это всего лишь байты.
Кроме того, ядро не выполняет юникодную нормализацию или обработку сбиваемых значений:
$ echo > ∕еtс∕раsswd; touch hó hó
$ ls
hó hó ∕еtс∕раsswd