了解标准库函数是否正在执行系统调用的重要性

时间:2013-04-28 19:21:59

标签: system-calls

程序员知道他/她正在使用的标准库函数是否实际执行系统调用真的很重要吗?如果是这样,为什么?

直觉我猜测唯一重要的是知道通用标准函数是库函数还是系统调用本身。在其他情况下,我猜测没有太多需要知道库函数是否在内部使用系统调用?

2 个答案:

答案 0 :(得分:1)

有时它可能很重要,有时却不重要。我不认为这个问题有任何普遍的答案。我可以认为可能某些上下文中非常重要的原因是:如果系统调用需要用户可能没有的用户权限;在性能关键代码中,系统调用可能过于重量级;如果您正在编写一个禁止大多数系统调用的信号处理程序;如果它可能使用某些系统资源(例如,从/ dev / random读取每个随机数可能会占用整个熵池 - 你想知道每次调用rand()时是否会发生这种情况。) / p>

答案 1 :(得分:1)

并不总是可以知道(肯定)库函数是否包装系统调用。但不管怎样,这些知识可以帮助提高程序的可移植性和(或)效率。至少在以下两种情况下,了解程序的系统调用级行为是有帮助的。

  1. 当您的计划对时间至关重要时。一些系统调用很昂贵,并且包装它们的库函数更加昂贵。因此,时间关键任务可能需要切换到根本不进入内核空间的等效函数。

    值得注意的是linux的vsyscall(或vdso)机制,它通过将实现映射到用户空间内存来加速某些系统调用(即gettimeofday)。有关详细信息,请参阅this

  2. 当您的程序需要通过系统调用审核部署到某些受限制的环境时。为了使您的程序能够在这样的环境中生存,可能需要对您的程序进行任何潜在的违反策略的描述,或者如果您在编写程序时意识到这些限制,可能不那么严格。