Kernel

如果不是程式語言中的實現,“系統呼叫”是什麼意思?

  • June 14, 2014

我想理解術語“系統呼叫”。我熟悉系統呼叫用於從使用者空間應用程序獲取核心服務。

我需要澄清的部分是“系統呼叫”和“系統呼叫的 C 實現”之間的區別。

這是一個讓我困惑的引述:

在類 Unix 系統上,該 API 通常是 C 庫 (libc) 實現的一部分,例如 glibc,它為系統呼叫提供包裝函式,通常與它們呼叫的系統呼叫命名相同

什麼是“他們呼叫的系統呼叫”?他們的來源在哪裡?我可以將它們直接包含在我的程式碼中嗎?

一般意義上的“系統呼叫”是否只是一個 POSIX 定義的介面,但要實際查看實現,可以檢查 C 原始碼並在其中查看實際使用者空間與核心通信的實際情況?

背景說明:我試圖了解最終是否每個 c 函式最終與來自/dev.

系統呼叫本身是一個概念。它們代表程序可以要求核心執行的操作。

這些系統呼叫在類 UNIX 系統的核心中實現。這個實現(用 C 編寫,小部分用 asm 編寫)實際上執行系統中的操作。

然後,程序使用一個介面來請求系統執行系統呼叫。該介面由 POSIX 指定。這是 C 標準庫的一組函式。它們實際上是包裝器,它們可能會執行一些檢查,然後呼叫核心中的系統特定函式,告訴它執行系統呼叫所需的操作。訣竅是那些作為介面的函式的名稱與系統呼叫本身相同,並且通常直接稱為“系統呼叫”。

您可以通過系統特定的機制直接呼叫核心中執行系統呼叫的函式。問題是它使您的程式碼絕對不可移植。

因此,系統呼叫是:

  • 一個概念,核心為向使用者程序提供服務而執行的一系列動作
  • 您應該在程式碼中使用 C 標準庫的函式來從核心獲取此服務。

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