umask函数是核函数吗?

umask函数是核函数吗?

我假设该umask()函数是:

包含通常称为变量的 shell 函数文件创建掩码

但我错了,因为umask()不是 shell 函数并且不包含这样的变量。

如果该umask()函数不是“shell 函数”,是否可以将其命名为“内核函数”?

答案1

umask 的手册说:

通过 fork(2) 创建的子进程继承其父进程的 umask。 execve(2) 保持 umask 不变。

因此,因为它在调用 exec (execve) 后仍然存在,所以它必须在内核中实现,因为所有 exec 调用都会替换正在运行的程序(除了存储在内核中的某些结构之外)。

答案2

不存在“内核函数”这样的东西,除非你的意思是

umask(2) 是一个系统调用。自从时间的黎明[1]。

但不一定非要这样——您可以通过让实际位掩码成为始终映射到同一地址并通过 execve(2) 保留的内存块的一部分来实现它,并使用 open(2) 、 creat(2) 等用户态包装器从那里获取它。这同样符合 POSIX 标准。

[1] 在原始实现中,u.u_cmask函数设置的字段仅在其他地方的单个位置使用 - 在“创建新文件”中标记节点()功能。

相关内容