首先查找系统调用文件

#find / -name unistd.h

/root/linux/include/unistd.h
/usr/include/linux/unistd.h
/usr/include/sys/unistd.h
/usr/include/bits/unistd.h
/usr/include/unistd.h

查看系统调用值

/root/linux/include/unistd.h

#define __NR_setup  0   /* used only by init, to get system going */
#define __NR_exit   1
#define __NR_fork   2
#define __NR_read   3
#define __NR_write  4
#define __NR_open   5
#define __NR_close  6

其他更多自行参考

Linux的exit

在linux中,这两个函数都用于正常终止一个函数。

但是函数_exit()直接是一个sys_exit系统调用;

而函数exit()则通常是普通函数库中的一个函数,它会先执行一些清楚操作,例如调用执行各终止处理程序、关闭所有标准IO等,然后再调用sys_exit。

_exit.c

#define _LIBRARY_ //定义符号常量

#include<unistd.h> //linux标准头文件。定义了各种符号常数和类型,并声明了各种函数(详见头文件);若定义了_LIBRARY_,则还包括内核系统调用号和内嵌汇编_syscall0()等。

这是内核使用的程序(退出)或终止函数。

直接调用系统中断int 0x80,功能号为_NR_exit。参数exit_code退出码。关键字volatile用于告诉编译器gcc该函数不会返回。

这样可以让gcc产生一些更好的代码,更重要的使用这个关键字可以避免产生某些假警告信息。

volatile void _exit(int exit_code)

{

_asm_("int $0x80"::"a"(_NR_exit),"b"(int exit_code));

}

这里用到了嵌入汇编,这里执行的动作就是调用系统中断int 0x80,在调用系统中断之前,将系统调用号_NR_exit放到寄存器eax中,退出码exit_code放到寄存器ebx中。

用于关键字volatile告诉编译器gcc告诉该函数没有返回,所以在嵌入汇编中并没有给出输出寄存器。

汇编语言调用Linux系统调用相关推荐

  1. qt调用linux系统调用,qt在其他函数调用数据库

    <多核与GPU编程:工具.方法及实践>----3.2 线程 本节书摘来自华章出版社<多核与GPU编程:工具.方法及实践>一书中的第3章,第3.2节, 作 者 Multicore ...

  2. linux内核关闭网络巨帧xenomai,xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务...

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正. 1. 引出问题 上一篇文章xenomai内核解析--双核系统调用(一)以X86处理器为例,分析了xenomai内核调用的流程, ...

  3. (转)Linux系统调用和库函数调用的区别

    Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions). 系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意 ...

  4. linux系统调用和库函数调用的区别

    1.系统调用 系统调用提供的函数如open, close, read, write, ioctl等,需包含头文件unistd.h.以write为例:其函数原型为 size_t write(int fd ...

  5. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...

  6. python 调用linux内核api_Linux系统调用及用户编程接口(API)学习

    Linux系统学习 系统调用指操作系统提供给用户程序调用的一组"特殊"接口,用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务. 为什么用户程序不能直 ...

  7. 什么是Linux系统调用system call?(Linux内核中设置的一组用于实现各种系统功能的子程序)(区别于标准C库函数调用)核心态和用户态的概念、中断的概念、系统调用号、系统调用表

    文章目录 什么是系统调用? 为什么要用系统调用? 系统调用是怎么工作的? 如何使用系统调用? _syscall*()是什么? errno是什么? 调用性能问题 Linux系统调用列表 进程控制 文件系 ...

  8. 转载 linux系统调用和库函数调用的区别

    源地址 http://blog.csdn.net/zhangskd/article/details/6956638 Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(L ...

  9. 操作系统原理,系统调用,系统调用与库函数API等函数之间的调用关系,功能与机制设计,系统调用的执行过程与Linux系统调用执行示例,不同操作系统下的PCB

    操作系统原理,系统调用,功能与机制设计,系统调用的执行过程与Linux系统调用执行示例,不同操作系统下的PCB 一.系统调用:操作系统功能调用,用户在编程时可以调用的操作系统功能. 1.系统调用是操作 ...

最新文章

  1. C语言的一个之前没有见过的特性
  2. 深挖数据价值 阿里云栖开年大会报道
  3. 谁说用 Git 一定要用命令行?试试 SourceTree 吧
  4. 【FPGA】SRIO例子程序仿真分析实践
  5. 高德地图只显示一个省_浅谈当下各种导航软件:高德地图、百度地图、腾讯地图...
  6. 一友人昨夜接到电话,发生何事
  7. JDK提供的检测工具
  8. java 泛型机制_java中的泛型机制
  9. python安装环境傻瓜式安装_Python环境安装(两种方式)
  10. GWT 2 Spring 3 JPA 2 Hibernate 3.5教程
  11. qt中创键树形控件QTreeWidget与QStackWidget相绑定
  12. 原子变量 java_Java原子变量详解
  13. PythonBasics 中文系列教程 · 翻译完成
  14. MongoDB中常用的几种数据类型
  15. STM32中使用MMA7660重力加速度传感器
  16. 关于topk accuracy
  17. 冰雪旅游城长春打造冰雪景观盛宴迎新春
  18. 跳动爱心代码-李峋同款爱心代码(升级版)
  19. oracle 按照固定顺序排序
  20. HLk-v20一v20s详细资料地址

热门文章

  1. rust熔炉怎么带走_Rust游戏中12个实用小技巧,包含无伤下坠、直梯爬楼
  2. linux系统桌面缺色,红旗系统如何用?
  3. MySQL面试题 | 附答案解析(二十)
  4. Flume基础及Flume高质量博客合集
  5. CloudComparer点云处理软件
  6. VS上配置opencv249所添加的附加依赖项
  7. CS131专题-3:图像梯度、边缘检测(sobel、canny等)
  8. OpenCV 贝叶斯分类器示例
  9. P2114 [NOI2014]起床困难综合症
  10. 【目标检测】(5) YOLOV1 目标检测原理解析