如何判断一个函数是否使用了系统调用

3

我正在学习系统调用,并开始理解它们。我知道不应该直接调用它们(因为这会使您的代码不够可移植),而应该调用API。但是,有没有办法确定某个函数是否使用了系统调用?我读到并非所有函数都需要系统调用(一些库函数)。例如,fopen最终将使用系统调用。我的问题如下:

  1. 像cin(c++)这样的函数需要系统调用吗?

  2. 有办法确定一个函数是否使用了系统调用吗?

1个回答

3
GDB有一个“系统调用中断”功能。请参见https://sourceware.org/gdb/onlinedocs/gdb/Set-Catchpoints.html
因此,如果您是新手调试工具,则应设置catchpoint并步过调用函数的行(在gdb中为“next”)。如果在到达函数调用后的下一行之前中断,则发生了系统调用(或程序崩溃,我猜测)。
使用cin >> ...读取输入时,可能会或可能不会调用系统调用。这取决于缓冲区中是否已经有足够的数据。如果缓冲区中没有足够的数据,则必须进行系统调用以从底层文件或设备检索数据。
C ++语言没有提供一种轻松的内置方法来静态确定函数是否可能执行系统调用。实际上,函数foo可能调用某个将单独编译的extern函数bar(在另一个翻译单元中),该函数调用系统调用;直到链接时间,才能知道foo可能间接调用系统调用的事实。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接