2014-02-07 44 views
0

我想知道,如果strcpy或strcat像函数会导致任何系统调用,或者他们由操作系统内部处理?为strcpy或strcat C++函数调用哪个系统调用?

+0

如果有疑问,可以通过'strace'它会显示你运行的二进制系统调用二进制执行。 – smani

+0

是的。我做到了。 strace不显示任何系统调用这些函数。这让我问你们......这种操作是如何处理的?有什么方法可以抓住这些事件吗? –

+3

您可以尝试[ltrace](http://ltrace.alioth.debian.org/)获取库痕迹。 str函数不会进行系统调用。 – Keith

回答

2

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

+0

是的,但是这个事实没有提供任何有关系统调用的信息。 –

+0

@StefanoSanfilippo增加了一些有关系统调用的一般信息。 –

+1

是的,它的作用是:这些函数在C运行时库中实现,它是普通的非特权代码,而不是系统调用,它是对内核中特权操作系统函数的调用。 –

3

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

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

4

不涉及系统调用。事实上,大多数如果不是全部实现的源代码看起来像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; 
}