系统调用可以解释为操作系统为用户提供的一些接口,这些接口提供了对系统硬件功能的操作。这样说大家可能还有点抽象,我再举一个更具体的例子:比如我要写一个程序,这个程序的功能就是在屏幕上显示一个字符串“hello,world!”。那么实现这么一个在屏幕上显示一个字符串的操作就是系统调用write()的功能。
那么系统调用的意义在哪里呢? 你想想看,你写一个程序还需要自己去实现在屏幕上打印字符串的代码,这也太累人了吧,,因此系统调用把我们从底层的硬件编程中解放了出来。再者,系统调用是内核代码,内核代码能访问系统上的所有地址空间,而我们执行的代码是用户空间的代码,用户空间的代码在对系统进行操作时是有限制的,(作为一个菜鸟程序员,系统如果不对你写的代码进行限制,,万一把系统搞蹦了呢。。)。因此系统调用的另一个功能就是维护了系统的安全性,,你要用就直接调用我这个接口就行了,,不用你自己写。系统调用还有一个功能就是为了方便程序的移植性。。 总之,你就把系统调用当做一个接口,什么时候你需要使用它了,调用一下它就行了,既方便又安全。。 你可能会有疑问,我们平时在写C语言时打印一个字符串不是用PRintf()函数吗?这个printf()跟前面提到的那个系统调用write()有什么区别呢?问对了。 其实你可以把库函数当做是对系统调用的又一次封装。。什么意思呢?系统调用作为内核提供给我们的接口,它的执行效率是比较高效精简的。但是有时候我们需要对获取的信息进行更复杂的处理,这个时候如果我们把这些处理过程包装成一个函数再提供给程序员,不是更方便编程了吗?因此一个库函数有可能含有一个系统调用,有可能有好几个系统调用,当然也有可能没有系统调用,比如有些操作就不需要涉及内核的功能。 总之,库函数是面向程序员的应用编程接口。看一下下面这张图也许更明白了它们之间的关系:新闻热点
疑难解答