libc函数“strcpy()”调用任何系统调用吗?

时间:2012-10-07 00:13:11

标签: posix libc system-calls strcpy

我想知道是否有任何libc函数不会调用任何系统调用()?例如,对于libc函数“strcpy()”,它是否为任何系统调用(让我们考虑所有可能的linux系统)。

2 个答案:

答案 0 :(得分:5)

系统调用在性能上非常重要,因为它们意味着上下文切换到内核。因此,对于像strcpy这样的简单库函数(其功能实际上等同于while(*d++ = *s++),但可能针对架构进行了优化),系统调用没有任何意义。

请注意,复制期间的页面错误可能导致内核上下文切换和系统调用的出现,但这不是strcpy直接调用系统调用的结果。

答案 1 :(得分:4)

系统调用有点像用户域(程序运行的地方)到内核域的接口。当你正在做只有内核可以做的事情时,例如与硬件通信(例如从网卡读取字节,启动进程,甚至通过malloc分配内存(使用brk)等),都需要它们。

另一方面,Userland函数(如strcpy)不会缩进进行系统调用。他们不需要特殊的权限来做他们所做的事情,他们只是在用户土地上对进程的记忆进行操作。

由于系统调用引入了一个主要的性能损失(将模式从用户更改为内核并返回成本很高),在设计的角度来看,将这些函数放在一个常用的函数strcpy中是没有意义的因此不太可能被看到。