Umask

umask 函式是核函式嗎?

  • December 6, 2018

我假設umask()函式是:

包含通常稱為文件創建遮罩的變數的 shell 函式

但我錯了,因為umask()它不是 shell 函式,也不包含這樣的變數。

如果該umask()函式不是“shell函式”,是否可以將其命名為“核心函式”?

沒有“核心函式”之類的東西,除非你的意思是this

umask(2) 是一個系統呼叫從一開始就是這樣

$$ 1 $$. 但它不一定是那樣——你可以通過讓實際的位遮罩成為一塊記憶體的一部分來實現它,該記憶體塊總是映射到相同的地址並通過 execve(2) 保存,並且有 open(2) , creat(2) 等使用者態包裝器從那裡獲取它。這將與 POSIX 兼容。

$$ 1 $$在原始實現中u.u_cmask,函式設置的欄位僅在其他地方的一個地方使用——在“製作新文件” maknode()函式中。

umask 的手冊說:

通過 fork(2) 創建的子程序繼承其父程序的 umask。execve(2) 保持 umask 不變。

因此,因為它在呼叫 exec (execve) 後仍然存在,所以它必須在核心中實現,因為所有 exec 呼叫都會替換正在執行的程序(除了一些儲存在核心中的結構)。

引用自:https://unix.stackexchange.com/questions/483636