45 若要檢查旗誌是否已存在於系統中,應使用什麼方式?
(A) 使用access()函數
(B) 使用sem_open()函數
(C) 使用sem_init()函數
(D) 使用sem_post()函數

答案:登入後查看
統計: A(0), B(4), C(2), D(2), E(0) #3399892

詳解 (共 2 筆)

#7319138

【第一步:找關鍵字】

旗誌(Semaphore,號誌)
→ 作業系統用來做「同步控制(避免多個程式搶資源)」的工具

檢查是否已存在
→ 關鍵在「不是建立」,而是「確認有沒有」

關鍵字判讀:
?「存在檢查」+「Semaphore」

【第二步:白話翻譯】

這題在問:
?「我想知道系統裡某個 semaphore(號誌)有沒有已經被建立,要用哪個函數?」

【第三步:解題思路】

這題在考什麼觀念?

? POSIX Semaphore(作業系統的號誌 API)使用方式

解題步驟

  1. 分清楚各函數用途:

  • sem_open()
    → 開啟「已存在的 semaphore」或建立新的

  • sem_init()
    → 初始化(通常是記憶體內的 semaphore)

  • sem_post()
    → signal(釋放資源)

  • access()
    → 檢查「檔案」是否存在

  1. 題目重點:
    ?「檢查是否存在」

→ 在 POSIX 中,sem_open() 可以用來嘗試開啟既有 semaphore
→ 如果不存在就會失敗

  1. 結論:
    ? 用 sem_open() 來判斷

原理與規則

sem_open(開啟號誌)是什麼?
→ 用名稱去「找系統中的 semaphore」

  • 如果存在 → 成功打開

  • 如果不存在 → 失敗(除非指定建立)

生活比喻:

你去租置物櫃:

  • sem_open → 嘗試打開某個櫃子

    • 有 → 打得開

    • 沒有 → 打不開

? 這就等於「檢查存在」

【第四步:選項分析】

  • (A) 使用 access() 函數
    ❌ 錯
    → access 是檢查「檔案」存在
    → 不是 semaphore

  • (B) 使用 sem_open() 函數
    ✅ 正確
    → 用來「開啟已存在的 semaphore」
    → 若不存在會回傳錯誤 → 可用來判斷

  • (C) 使用 sem_init() 函數
    ❌ 錯
    → 用於初始化(通常是記憶體內 semaphore)
    → 不是用來查存在

  • (D) 使用 sem_post() 函數
    ❌ 錯
    → 用來釋放 semaphore(+1)
    → 完全不是檢查用途

【觀念補充與延伸】

核心觀念定位

這題屬於:
? 作業系統 → 同步機制(Semaphore API)
? 常考 API 功能辨識題

法條或定義

POSIX Semaphore(POSIX 號誌)
→ 一套標準 API,用來做程序同步

常見函數:

  • sem_open → 開啟/建立

  • sem_wait → 等待(P)

  • sem_post → 釋放(V)

  • sem_close → 關閉

觸類旁通(舉一反三)

對比概念:

  • sem_open → 「找或開」

  • sem_init → 「初始化(記憶體內)」

? 常考差異!

變化題型:

  1. 哪個函數是 P 操作?(sem_wait)

  2. 哪個是 V 操作?(sem_post)

  3. sem_open vs sem_init 差別

【記憶口訣】

?「要找 semaphore,就用 open」

或:

?「存在用 open,操作用 post/wait」

【常見陷阱】

學生最容易搞混的地方

  • 把 access() 當萬用「存在檢查」

  • 忘記 semaphore 是 OS 物件,不是檔案

心理盲點

看到「檢查存在」就選 access
? 但題目是 semaphore,不是檔案!

避坑指南

解題順序:

  1. 先判斷「物件是什麼」

  2. 再選對應 API

? 檔案 → access
? semaphore → sem_open

0
0
#6786478
題目解析 本題的目的是考查考生對於在系統...
(共 920 字,隱藏中)
前往觀看
0
0