linux文件调用,Linux系统调用实例和功能速查

什么叫Linux系统调用?

ac246b919c92918224417ca11eb53aa6.png

Linux系统由C语言开发,相关信息和知识,可以关注虫虫见有关C语言的文章和问答。在Linux中系统调用是有Linux内核提供的各种功能服务,为了便于调用Linux提供了一个底层C语言库libc(glibc是GUN版本的libc,其他类似库还有uclibc、klibc),目前glibc是linux标准函数库,这些都对系统系统接口打包成了标准C函数,这些函数一般就成为系统调用。

85ce792440f885c8524dd9bcbb74f43d.png

系统调用可以通过syscall()函数发起,或者调用每个对应的一个C函数,这些函数定义在 或者 头文件中。

Linux系统中通过软中断0x80调用实现控制权转移给内核,内容执行完成后返回结果。所有系统调用在linux内核的源文件目录" arch/x86/kernel"中的各种文件中定义,具体建本文最后一部分的列表。

50ac34f287870243e20fc8b919d81f06.png

一个系统通调用的例子

首先虫虫以一个获取当前程序进程号实例,说明系统调用的编程和使用。程序中用到syscall(SYS_getpid)和直接调用getpid()函数的两种方式,也演示了用execve执行shell命令过程:

a2ffc5e7171d276e12d11f915a111a13.png

#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[]={0,NULL};//传递给执行文件新的环境变量数组

execve("/bin/ps",argv,envp);

return (0);

}

以上程序保存为chongchong.c

编译 gcc -o chognchong

然后执行 ./chongchong就可以看到结果:

5fd5f37958311f3c2912c3402b9a9dd0.png

常见系统调用说明和源码速查

下面是虫虫总结列出了Linux下的系统调用,对其功能予以说明,并列出其源码位置,以供浏览和学习。系统调用的二进制包一般为/lib/libc.so.6,直接执行这个就获取其版本,或者用ldd -version命令。

比如虫虫的centos 6.5系统:

8bd4a51b8f1115e54415dcb61e79c8dc.png

f261e9d3f6a62a070bbf76a568ab103a.png

dc0723a4533874ebc8318c4847a549ce.png

由于平台不支持传表格,所以专程图了,如果有需要原始文本表的请联系虫虫

举报/反馈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值