Linux 的 System Call 笔记
 
 
 
 
 
 
 
 
 
 
 
贡献者: addis
1. 理论基础
- 参考 Linux Kernel Interfaces - Wikipedia,System Call - Wikipedia。
- User Space - Wikipedia:系统的虚拟内存被划分为 kernel space 和 user space。前者跑的是系统内核和一些驱动,剩下的所有程序和另一些驱动都在后者。
- 系统内核的两种 API:一个是 Linux API("kernel–user space" API)(user-space 程序需要的),另一个是 "kernel internal" API(内核内部使用的)。
- Linux API 由内核的 System Call Interface(SCI) 以及 GNU C Library (glibc) 中的函数构成。glibc 提供 SCI 的一个 wrapper。
- 内核大约一共提供 380 个 system call。常见的如
open, read, write, close, wait, exec, fork, exit, kill
- 一些常用的工具用于诊断程序的 system call 如:
strace, ftrace, truss
- 六类 system call:
Process control
,File management
,Device management
,Information maintenance
,Communication
,Protection
- 类 Unix 系统的 system call 都是在
kernel mode
执行的。
2. 编程实践
- 参考这篇教程。
-
<unistd.h>
头文件提供各种 system call,例如 write(1, "hello, world!\n", 14);
-
<sys/syscall.h>
是更底层的工具,例如提供函数 syscall(SYS_write, 1, "hello, world!\n", 14);
。而 syscall()
是用机器码定义的。
致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者
热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利