Linux中的当前语言环境如何影响C代码中的文件名



我正在使用C-Program中的国际化文件名合作。特别是我的代码,我在其中创建了中文符号的文件:

int fd = open("/tmp/⺴", O_WRONLY | O_CREAT | O_TRUNC);

尽管我的系统语言环境是俄罗斯(lang = ru_ru.utf-8(。

为什么在我的语言环境似乎不支持中文符号的代码时创建此文件?在这种情况下

open(2)函数只是open系统调用的包装器 - 并且没有采取任何其他操作以将参数放在正确的寄存器中,执行系统调用并检索其返回值。

和内核根本不知道或关心地区。

具体而言,在open(2)path参数中,唯一具有特殊意义的字节为47(/(,将路径元素和0(nul字节(分开。

内核不是大多数文件系统都不会阻止您创建具有畸形UTF-8或任何二进制垃圾的名称的文件 - 对于内核,它们只是字节。

另外,内核不进行任何Unicode归一化或混淆的处理:

$ echo > ∕еtс∕раsswd; touch hó hó
$ ls
hó  hó  ∕еtс∕раsswd

最新更新