什么叫Linux系统调用?
Linux系统由C语言开发,相关信息和知识,可以关注虫虫见有关C语言的文章。在Linux中系统调用是有Linux内核提供的各种功能服务,为了便于调用Linux提供了一个底层C语言库libc(glibc是GUN版本的libc,其他类似库还有uclibc、klibc),目前glibc是linux标准函数库,这些都对系统系统接口打包成了标准C函数,这些函数一般就成为系统调用。
系统调用可以通过syscall()函数发起,或者调用每个对应的一个C函数,这些函数定义在或者头文件中。
Linux系统中通过软中断0x80调用实现控制权转移给内核,内容执行完成后返回结果。所有系统调用在linux内核的源文件目录"arch/x86/kernel"中的各种文件中定义,具体建本文最后一部分的列表。
一个系统通调用的例子
首先虫虫以一个获取当前程序进程号实例,说明系统调用的编程和使用。程序中用到syscall(SYS_getpid)和直接调用getpid()函数的两种方式,也演示了用execve执行shell命令过程:
#include
#include
#include
#include
int main(void) {
long CC1,CC2;
//通过syscall调用SYS_getpid
CC1 = syscall(SYS_getpid);
printf ("syscall(SYS_getpid)=%ld\n", CC1);
// C函数库调用
CC2 = getpid();
printf ("getpid()=%ld\n", CC2);
//用execve执行shell命令
char *argv[]={"ps","aux",NULL,NULL};//传递给执行文件的参数数组,这里包含执行文件的参数
char *envp[]=;//传递给执行文件新的环境变量数组
execve("/bin/ps",argv,envp);
return (0);
}
以上程序保存为chongchong.c
编译 gcc -o chognchong
然后执行 ./chongchong就可以看到结果:
常见系统调用说明和源码速查
下面是虫虫总结列出了Linux下的系统调用,对其功能予以说明,并列出其源码位置,以供浏览和学习。系统调用的二进制包一般为/lib/libc.so.6,直接执行这个就获取其版本,或者用ldd -version命令。
比如虫虫的centos 6.5系统:
领取专属 10元无门槛券
私享最新 技术干货