函數指針、回調函數、系統調用區別1.函數指針 2.回調函數 體現: 1.函數名作為參數傳遞給調用函數。 2.將調用者和被調函數分開,回調函數實現具體的功能,調用者無需關註實現的具體細節。3.系統調用系統調用 --> (0x80)軟中斷(系統調用表) --> 內核函數 --> 返回到系統調用層 rea ...
函數指針、回調函數、系統調用區別
1.函數指針
1 int add(int a, int b)
2 {
3 return a+b;
4 }
5
6 int (*fp)(int,int);
7
8 int main()
9 {
10 int c;
11 fp = add; //有指針賦值操作,靜態綁定
12 c = fp(2,4);
13 printf("c = %d\n",c);
14 return 0;
15 }
2.回調函數
1 int add(int a, int b) //回調函數
2 {
3 return a+b;
4 }
5
6 int fun(int a, int b, void(*fp)())//中間函數,動態綁定,與傳遞的函數名有關
7 {
8 return fp(a,b);
9 }
10
11 int main()
12 {
13 int c;
14 c = fun(2,4);
15 printf("c = %d\n",c);
16 return 0;
17 }
體現: 1.函數名作為參數傳遞給調用函數。
2.將調用者和被調函數分開,回調函數實現具體的功能,調用者無需關註實現的具體細節。
3.系統調用
系統調用 --> (0x80)軟中斷(系統調用表) --> 內核函數 --> 返回到系統調用層
read --> 系統調用號--內核函數入口 --> 實現功能 --> 返回調用結果
實現方式: 通過中斷實現,使用寄存器傳參
進程經歷了從用戶態到內核態的切換,處理完成後再恢復到用戶態繼續完成系統調用的過程。