我想知道,如果strcpy或strcat像函数会导致任何系统调用,或者他们由操作系统内部处理?为strcpy或strcat C++函数调用哪个系统调用?
回答
在Linux上,这些调用由标准库实现(并且这些是标准C库的一部分)。另请参阅glibc。系统调用是从用户代码到内核代码的硬件访问调用(例如内存分配);他们完成了interrupt 0x80。
是的,但是这个事实没有提供任何有关系统调用的信息。 –
@StefanoSanfilippo增加了一些有关系统调用的一般信息。 –
是的,它的作用是:这些函数在C运行时库中实现,它是普通的非特权代码,而不是系统调用,它是对内核中特权操作系统函数的调用。 –
这种简单操作不需要操作系统调用 - 它们可以在库中轻松执行。
请注意,操作系统可能会在此类调用期间输入,例如。因为它们会产生页面错误或其他硬件中断。
不涉及系统调用。事实上,大多数如果不是全部实现的源代码看起来像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. 做libc函数“strcpy()”调用任何系统调用?
- 2. 与c的系统调用
- 3. pause()系统调用的系统调用处理函数在哪里?
- 4. 系统调用vs函数调用
- 5. 在C库函数中调用系统
- 6. 调用C“系统” ++
- 7. Perl系统()调用使用哪个shell?
- 8. C编译器如何决定是否调用库函数或系统调用
- 9. 在C中使用strcpy,strcat的冲突?
- 10. 如何用C语言重写一个函数(系统调用)?
- 11. 从系统调用用C
- 12. 系统()调用用C
- 13. C++:重复调用系统()
- 14. 用作bash系统调用的strcat结果不喜欢&符号
- 15. C标准库和系统调用
- 16. linux系统调用getpeername C++
- 17. 哪个进程在Linux内核中调用系统调用?
- 18. 哪个系统调用会在shell中“顶部”调用?
- 19. fork()系统调用c
- 20. Unix系统调用Objective-C
- 21. 系统调用在C++中
- 22. 在C系统调用
- 23. C++等待系统调用
- 24. Linux系统调用getifaddr C++
- 25. 调用系统()函数,Vim脚本
- 26. 系统()函数不从LD_PRELOAD'ed库调用
- 27. 系统函数调用异步?
- 28. 系统调用使用哪种模式?
- 29. XV6加计数系统的系统调用调用
- 30. 用Java统一调用函数C#Android
如果有疑问,可以通过'strace'它会显示你运行的二进制系统调用二进制执行。 – smani
是的。我做到了。 strace不显示任何系统调用这些函数。这让我问你们......这种操作是如何处理的?有什么方法可以抓住这些事件吗? –
您可以尝试[ltrace](http://ltrace.alioth.debian.org/)获取库痕迹。 str函数不会进行系统调用。 – Keith