我想知道strcpy或strcat之类的函数是否会导致任何系统调用,或者它们是否由操作系统内部处理?
答案 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完成的。