Linux系统调用实例和功能速查

什么叫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系统:

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180630A083PR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券