我假设umask()
函数是:
包含通常称为文件创建掩码的变量的 shell 函数
但我错了,因为umask()
它不是 shell 函数并且不包含这样的变量。
如果该umask()
函数不是“shell 函数”,是否可以将其命名为“内核函数”?
我假设umask()
函数是:
包含通常称为文件创建掩码的变量的 shell 函数
但我错了,因为umask()
它不是 shell 函数并且不包含这样的变量。
如果该umask()
函数不是“shell 函数”,是否可以将其命名为“内核函数”?
umask 的手册说:
因此,因为它在调用 exec (execve) 后仍然存在,所以它必须在内核中实现,因为所有 exec 调用都会替换正在运行的程序(除了一些存储在内核中的结构)。
没有“内核函数”之类的东西,除非你是这个意思。
umask(2) 是一个系统调用。自古以来就是如此[1]。
但它不一定是那样——你可以通过让实际的位掩码成为内存块的一部分来实现它,内存块总是映射到相同的地址并通过 execve(2) 保存,并让 open(2) , creat(2), 等等 userland wrapper 从那里获取它。那将与 POSIX 兼容。
[1] 在最初的实现中
u.u_cmask
,函数设置的字段仅在其他地方的一个地方使用——在“创建新文件” maknode()函数中。