22 使用mkdirat()函數時,與mkdir()函數最大的差別在於?
(A) 建立多層目錄的能力
(B) 權限設定的方式
(C) 相對路徑的處理方式
(D) 錯誤處理機制
統計: A(2), B(3), C(3), D(0), E(0) #3399869
詳解 (共 2 筆)
【第一步:找關鍵字】
關鍵字:
-
mkdir() vs mkdirat()
-
at(關鍵!)
-
相對路徑(考點)
? 題目核心在 at 這個字
? 代表「在某個目錄之下操作」
【第二步:白話翻譯】
這題在問:
? 「mkdir 跟 mkdirat 有什麼最大差別?」
【第三步:解題思路】
這題在考什麼觀念?
? *系統呼叫中的「at 系列函數」設計概念
解題步驟
-
先理解 mkdir()
→ 用「路徑字串」直接建立資料夾 -
再理解 mkdirat()
→ 可以指定「某個目錄當基準」 -
比較差異
→ 相對路徑的解析方式不同
原理與規則(生活比喻)
想像你在找地址:
-
mkdir():
直接給完整地址(台北市XXX路) -
mkdirat():
先說「在某棟大樓裡」
再說「第幾間房」
? mkdirat() = 「在某個目錄(fd)底下操作」
【第四步:選項分析】
(A) 為什麼錯?
✘ 錯
多層目錄(例如 mkdir -p):
? 不是這兩個函數的差別
(B) 為什麼錯?
✘ 錯
兩者權限設定方式:
? 一樣(mode 參數)
(C) 為什麼對?
✔ 正確(本題答案)
? 最大差別:
相對路徑的處理方式
-
mkdir():
相對於「目前工作目錄」 -
mkdirat():
相對於「指定的目錄描述符(dirfd)」
(D) 為什麼錯?
✘ 錯
錯誤處理方式:
? 並沒有本質差異
【觀念補充與延伸】
核心觀念定位
? 系統程式 / POSIX 系統呼叫
? 中高階考點
法條或定義
-
mkdir(path, mode):
在指定路徑建立目錄 -
mkdirat(dirfd, path, mode):
在「dirfd 指定的目錄」下建立目錄
*為什麼要有 at 系列?
? 為了避免 race condition(競爭條件)
? 提升安全性(例如避免路徑被偷換)
*常見 at 系列
| 函數 | 功能 |
|---|---|
| openat | 開檔案 |
| mkdirat | 建目錄 |
| unlinkat | 刪檔 |
觸類旁通(舉一反三)
對比概念
-
相對路徑 vs 絕對路徑
-
cwd(current working directory)
變化題型
-
問:dirfd = AT_FDCWD 代表什麼?
? 使用目前工作目錄(等同 mkdir)
【記憶口訣】
? 「at = 在某個目錄底下」
【常見陷阱】
學生最容易搞混的地方
以為功能完全不同
心理盲點
看到新函數就以為是新功能
避坑指南
? 看到 *at:
直接聯想
→ 路徑基準點不同