2017-06-19 46 views
1

我被问及系统调用,它们是什么,它们使用了哪种模式,以及read(),getchar()和sqrt()是否使用系统调用。系统调用 - 内核使用的函数

对于第一部分,我回答说系统调用提供了进程和OS之间的接口,并且这些接口在内核模式下使用。

困扰我的事情是,对我来说,使用这3个系统调用的唯一函数是read()。

我对不对?或者getchar()和sqrt()也使用系统调用?

(注:从unistd.h中的getchar()stdio.h中和的sqrt(从文件math.h阅读()))

+1

你觉得'getchar()'得到这个角色怎么样? – Stargateur

+1

有/系统也提供(d)数学库。 – Olaf

+0

是的,我想过,但它不是一个中间函数,其中包含系统调用? 编辑:因为getchar()和sqrt()使用它们内部的系统调用。我可以说他们都是系统调用? –

回答

2

系统和普通电话之间的区别在于,一个系统调用有向操作系统发出陷阱,而常规调用只是调用另一个用户级子例程。你说得对,区别在于呼叫在什么模式下执行。

Sqrt不是系统调用。它所做的只是执行一个简单的计算。如果我没有记错,read()和getchar()都是系统调用,因为操作系统是处理输入/输出操作的人。

+0

哦,所以read()是一个直接的系统调用,getchar()在函数内使用系统调用,所以我们可以看到getchar()也是一个系统调用。唯一不是系统调用的人是sqrt(),因为它执行了计算? –

+0

getchar()本身并不一定使用系统调用,因为它是一个函数。它所做的是获取标准输入流中的下一个字符。这种对输入/输出流的访问是常规流程在没有操作系统的情况下所不能做到的,这就是为什么getchar是系统调用的原因。 –