Linux系统由C语言开发,相关信息和知识,可以关注虫虫见有关C语言的文章和问答。在Linux中系统调用是有Linux内核提供的各类功能服务linux 调用内核函数,为了易于调用Linux提供了一个底层C语言库libc(glibc是GUN版本的libc,其他类似库还有uclibc、klibc),目前glibc是linux标准函数库linux通配符,那些都对系统系统插口打包成了标准C函数,这种函数通常就成为系统调用。
系统调用可以通过syscall()函数发起,或则调用每位对应的一个C函数,这种函数定义在或则头文件中。
Linux系统中通过软中断0x80调用实现控制权转移给内核linux 调用内核函数,内容执行完成后返回结果。所有系统调用在linux内核的源文件目录"arch/x86/kernel"中的各类文件中定义小型linux系统,具体建本文最后一部份的列表。
一个系统通调用的事例
首先虫虫以一个获取当前程序进程号实例,说明系统调用的编程和使用。程序中用到syscall(SYS_getpid)和直接调用getpid()函数的两种形式,也演示了用execve执行shell命令过程:
#include
#include
#include
#include
intmain(void){
longCC1,CC2;
//通过syscall调用SYS_getpid
CC1=syscall(SYS_getpid);
printf("syscall(SYS_getpid)=%ldn",CC1);
//C函数库调用
CC2=getpid();
printf("getpid()=%ldn",CC2);
//用execve执行shell命令
char*argv[]={"ps","aux",NULL,NULL};//传递给执行文件的参数字段,这儿包含执行文件的参数
char*envp[]={0,NULL};//传递给执行文件新的环境变量字段
execve("/bin/ps",argv,envp);
return(0);
}
以上程序保存为chongchong.c
编译gcc-ochognchong
之后执行./chongchong就可以看见结果:
常见系统调用说明和源码速查
下边是虫虫总结列举了Linux下的系统调用,对其功能给以说明,并列举其源码位置,以供浏览和学习。系统调用的二补码包通常为/lib/libc.so.6,直接执行这个就获取其版本,或则用ldd-version命令。
例如虫虫的centos6.5系统: