我正在使用C程序中的国际化文件名。在创建带有中文符号的文件时,尤其是我的一段代码:
int fd = open("/tmp/⺴", O_WRONLY | O_CREAT | O_TRUNC);
尽管我的系统语言环境是俄语(LANG = ru_RU.UTF-8),该功能仍然可以正常工作并创建文件。
为什么在我的语言环境似乎不支持中文符号代码的情况下创建此文件?在这种情况下,受系统区域设置影响的领域是什么?
答案 0 :(得分:3)
open(2)
函数只是open
系统调用的包装器,并且除了将参数放入正确的寄存器,执行系统调用并获取其返回值外,没有做任何其他事情。
内核根本不了解或不关心语言环境。
具体来说,在path
的{{1}}参数中,唯一具有特殊意义的字节是用于分隔路径元素的47(open(2)
)和用于终止路径元素的0(NUL字节)。
内核不是大多数文件系统都不会阻止您创建名称格式不正确的utf-8或任何二进制垃圾的文件-对于内核来说,它们只是字节。
此外,内核没有对任何可规范化的代码进行规范化或处理:
/