您的位置:首页 > 其它

系统调用和库函数的区别

2016-10-22 20:20 162 查看
事先声明:以下是转载来的,不是老羊原创。要看全文请看:http://blog.csdn.net/high_high/article/details/7200053

系统调用(system call)是操作系统内核提供的函数,在内核态运行(kernel mode),属于函数中的低等下人,终身代号9527,虽然低等,但是谁也离不开他们,因为离开他们就没办法和内核打交道了,没办法和内核打交道就什么都歇菜了。

linux3.0.0-14的系统调用有346个,可以在源码的 Linux-3.0/arch/x86/kernel/syscall_table_32.S文件中找到所有的系统调用编号,如果以汇编的方法调用这些系统函数,那么放在EAX寄存器里面的值就是想要调用的函数的号码。

库函数是在系统调用上的一层包装,运行在用户态(user mode),打个比方吧,库函数相当于包工头,系统调用是工人,我们可以自己找工人分任务,但一般是把任务摊给包工头,包工头再去给工人分任务。

所以虽然最终所有的工作都是系统调用做的,但是我们更通常的做法是调用库函数,有以下几个原因:

库函数提供了抽象,抽象是个好东西,可以让我们把更多的注意力集中在要解决问题的核心。
库函数给我们提供的接口更人性化,所以调用起来更方便。
调用库函数更安全,内存管理不用自己太操心。
调用库函数效率更高,程序跑的更快。虽然库函数最终是调用系统函数,但是库函数会比我们用更好的方式方法调用系统函数。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  系统调用 库函数