函数指针、回调函数、系统调用区别
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 --> 系统调用号--内核函数入口 --> 实现功能 --> 返回调用结果
实现方式: 通过中断实现,使用寄存器传参
进程经历了从用户态到内核态的切换,处理完成后再恢复到用户态继续完成系统调用的过程。
时间: 2024-10-05 13:39:12