【问题标题】:Which system call is called for strcpy or strcat C++ functions?strcpy 或 strcat C++ 函数调用哪个系统调用?
【发布时间】:2014-02-07 14:21:41
【问题描述】:

我想知道类似 strcpy 或 strcat 的函数是否会导致任何系统调用,或者它们是否由操作系统内部处理?

【问题讨论】:

  • 如有疑问,您可以通过strace 运行您的二进制文件,这将显示二进制文件执行的系统调用。
  • 是的。我这样做了。并且 strace 没有显示这些函数的任何系统调用。这让我问你们......这种操作是如何处理的?有什么办法可以捕捉到这些事件?
  • 您可以尝试使用ltrace 进行库跟踪。 str 函数不进行系统调用。

标签: linux system-calls


【解决方案1】:

不涉及系统调用。事实上,如果不是全部的话,大多数实现的源代码看起来像 this

char * 
strcpy(char *s1, const char *s2) { 
    char *s = s1; 
    while ((*s++ = *s2++) != 0) ;
    return (s1);
}

strcatis similar:

char *
strcat(char *s1, const char *s2)
{
    strcpy(&s1[strlen(s1)], s2);
    return s1;
}

【讨论】:

    【解决方案2】:

    在 Linux 上,这些调用由标准库实现(并且它们是标准 C 库的一部分)。另见glibc。系统调用是从用户代码到内核代码的调用,用于硬件访问(例如内存分配);它们是通过interrupt 0x80 完成的。

    【讨论】:

    • 是的,但这一事实并未提供有关系统调用的信息。
    • @StefanoSanfilippo 添加了一些与系统调用有关的一般信息。
    • 是的:这些函数是在 C 运行时库中实现的,它是常规的非特权代码,而不是系统调用,它是对内核中特权 OS 函数的调用。
    【解决方案3】:

    这样简单的操作不需要操作系统调用 - 它们可以在库中轻松执行。

    请注意,操作系统可能会在此类调用期间进入,例如。因为它们会产生页面错误或发生其他一些硬件中断。

    【讨论】:

      猜你喜欢
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 1970-01-01
      • 2016-01-21
      • 2011-02-09
      • 1970-01-01
      • 2020-01-04
      相关资源
      最近更新 更多