linux中的系統呼叫

2021-10-02 16:40:27 字數 714 閱讀 8871

linux-0.11 中的close()api解析:

通常情況下,呼叫系統呼叫和呼叫普通自定義函式在**上並沒有什麼區別,但呼叫後發生的事情有很大不同。

呼叫自定義函式是通過call指令直接跳轉到該函式的位址,繼續執行。

呼叫系統呼叫是呼叫系統庫中為該系統呼叫編寫的乙個介面函式,即api。而api要做的就是去呼叫真正的系統呼叫,過程是:

把系統呼叫的編號存入eax;

把函式引數存入其他通用暫存器;

觸發0x80號中斷(int 0x80)。

這就是api的定義。它先將巨集_nr_close存入eax,將引數fd存入ebx,然後進行0x80中斷呼叫。呼叫返回後。從eax取出返回值,存入_res,再通過對_res的判斷覺得傳給api的呼叫者什麼樣的返回值。

其中_nr_close就是系統呼叫的編號,在include/unistd.h中定義:

Linux中的系統呼叫

當使用者態的程序呼叫乙個系統呼叫時,cpu切換到核心態並開始執行乙個核心函式。核心實現了許多不同的系統呼叫,程序必須傳遞乙個名為系統呼叫號 system call number 的引數來識別所需的系統呼叫,eax暫存器就用作此目的。所有的系統呼叫均返回乙個整數值。系統處理程式與其他異常處理程式的結構...

Linux中的wait系統呼叫

系統中的殭屍程序都要由wait系統呼叫來 下面就通過實戰看一看wait的具體用法 wait的函式原型是 include 提供型別pid t的定義 include pid t wait int status 程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經退出,如...

linux中wait系統呼叫

系統中的殭屍程序都要由wait系統呼叫來 下面就通過實戰看一看wait的具體用法 wait的函式原型是 include 提供型別pid t的定義 include pid t wait int status 程序一旦呼叫了wait,就立即阻塞自己,由wait自動分析是否當前程序的某個子程序已經 退出,...