Linux 内核分析 之四:使用库函数API和嵌入汇编两种方式使用同一个系统调用
说明 欧长坤 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期学校恰好有操作系统的课程,上个学习就开始寻思研究研究Linux内核代码,恰好MOOC有这个课程,遂选了此课。
一、准备工作 本周的实验比起前三周的实验稍微容易得多。我们可以在http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl中查看系统调用号。
二、分析 在这里,我们决定使用sysinfo这个库函数API,首先,我们得会使用这个API。
在 Linux 中,sysinfo可以用来获取系统相关信息的结构体。 函数声明和原型如下所示:
1 2 #include <sys/sysinfo.h>int sysinfo(struct sysinfo *info); 那么,这个sysinfo的结构体长什么样?
1 2 3 4 5 6 7 8 9 10 11 12 struct sysinfo { long uptime; unsigned long loads[3]; // 启动到现在经过的时间 unsigned long totalram; // 总的可用的内存大小 unsigned long freeram; // 还未被使用的内存大小 unsigned long sharedram; // 共享的存储器的大小 unsigned long bufferram; // 缓冲区大小 unsigned long totalswap; // 交换区大小 unsigned long freeswap; // 还可用的交换区大小 unsigned short procs; // 当前进程数目 char _f[22]; // 64字节的补丁结构 }; 其实我们都并不关心这个sysinfo的结构到底长什么样,我们目前所关心的是如何能够成功的调用。 实际上看到这里,我们已经能够完成使用库函数调用的C代码了。