对strcpy或strcat C ++函数调用哪个系统调用?

时间:2014-02-07 14:21:41

标签: linux system-calls

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

3 个答案:

答案 0 :(得分:4)

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

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

strcat is similar

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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