Umask
umask 函式是核函式嗎?
我假設
umask()
函式是:包含通常稱為文件創建遮罩的變數的 shell 函式
但我錯了,因為
umask()
它不是 shell 函式,也不包含這樣的變數。如果該
umask()
函式不是“shell函式”,是否可以將其命名為“核心函式”?
沒有“核心函式”之類的東西,除非你的意思是this。
$$ 1 $$. 但它不一定是那樣——你可以通過讓實際的位遮罩成為一塊記憶體的一部分來實現它,該記憶體塊總是映射到相同的地址並通過 execve(2) 保存,並且有 open(2) , creat(2) 等使用者態包裝器從那裡獲取它。這將與 POSIX 兼容。
$$ 1 $$在原始實現中
u.u_cmask
,函式設置的欄位僅在其他地方的一個地方使用——在“製作新文件” maknode()函式中。
umask 的手冊說:
通過 fork(2) 創建的子程序繼承其父程序的 umask。execve(2) 保持 umask 不變。
因此,因為它在呼叫 exec (execve) 後仍然存在,所以它必須在核心中實現,因為所有 exec 呼叫都會替換正在執行的程序(除了一些儲存在核心中的結構)。