1、系统调用的2种使用方式:
(1)靠C库支持,用户程序通过包含标准头文件并和C库链接,可使用系统调用
(2)调用库函数,再由库函数实际调用。
提示:如果你只写出系统调用,glibc库恐怕不提供支持。
2、LINUX提供一组宏,用于直接对系统调用 进行访问。它会设置寄存器并调用陷入指令,这些宏是__syscalln(),其中,n的范围0-6,代表需要 传递给系统调用的参数个数,没有库的支持,可使用该宏:
对于这种宏,至少需要2个参数,第1个参数是系统调用的返回值类型,第2个参数是系统调用的名称。
比如:https://aipro.blog.csdn.net/article/details/111885051所述的自定义系统调用:
系统调用号加入<asm/unistd.h>

#define __NR__mytest 338

然后编写main测试代码-宏

#define __NR__mytest 338
__syscall0(long,mytest)
int main(){long test1;test1=mytest();return ...
}

3、系统调用注意事项:
(1)需要一个系统调用号,这需要内核处于开发版本时,官方分配给你,除非你自己定义自己使用的linux
(2)系统调用一旦加入内核就固化,接口不能改动。
(3)系统调用需要注册到每个官方linux支持的体系结构中。
因此,在一个流行的官方 linux系统中,加入系统调用并不容易
所以可使用以下替代方案:
实现一个设备节点,并对此实现read()和write(),使用ioctl()对特定设置进行操作或对特定信息进行检索。
(1)像信息号这样的某些接口,可用于文件描述符。
(2)把增加信息作为一个文件放在sysfs的合适位置。

linux内核杂记(16)-系统调用(3)相关推荐

  1. linux内核杂记(13)-系统调用(1)

    1.系统调用 在用户空间进程和硬件 设备之间增加了一具中间层.其作用如下: (1)为用户空间提供了一种硬件 的抽象接口. (2)保证了系统的稳定 和安全 (3)每个进程 运行在虚拟系统中,而在用户空间 ...

  2. linux内核杂记(15)-系统调用(2)

    1.内核在执行系统调用时,处于进程上下文状态,current指针指向调用 系统调用的进程. 2.在进程上下文中 (1)内核可休眠(比如在系统调用阻塞或显式调用 schedule()时). 休眠说明系统 ...

  3. 跟踪分析Linux内核5.0系统调用处理过程

    跟踪分析Linux内核5.0系统调用处理过程 学号384 原创作业转载请注明出处+中国科学技术大学孟宁老师的Linux操作系统分析 https://github.com/mengning/linuxk ...

  4. Linux内核深入理解系统调用(3):open 系统调用实现以及资源限制(setrlimit/getrlimit/prlimit)

    Linux内核深入理解系统调用(3) open 系统调用实现以及资源限制(setrlimit/getrlimit/prlimit) rtoax 2021年3月 对原文进行了5.10.13的代码分析. ...

  5. Linux内核深入理解系统调用(1):初始化-入口-处理-退出

    Linux内核深入理解系统调用(1):初始化-入口-处理-退出 rtoax 2021年3月 1. Linux 内核系统调用简介 这次提交为 linux内核解密 添加一个新的章节,从标题就可以知道, 这 ...

  6. linux内核打开prntk,操作系统实验一向Linux内核增加一个系统调用.docx

    操作系统实验一: 向Linux内核增加一个系统调用 xx 711103xx 2012年3月18日 一.实验目的 通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法:掌握用 户程 ...

  7. Linux内核深入理解系统调用(2):vsyscall 和 vDSO 以及程序是如何运行的(execve)

    Linux内核深入理解系统调用(2) vsyscall 和 vDSO 以及程序是如何运行的(execve) rtoax 2021年3月 1. vsyscalls 和 vDSO 这是讲解 Linux 内 ...

  8. linux内核syscall_define6,Syscall系统调用Linux内核跟踪

    在Linux的用户空间,我们经常会调用系统调用,下面我们跟踪一下read系统调用,使用的Linux内核版本为Linux2.6.37.不同的Linux版本其中的实现略有不同. 在一些应用中我们可以看到下 ...

  9. 分析Linux内核5.0系统调用处理过程

    学号: 363 本实验来源 https://github.com/mengning/linuxkernel/ 一.实验要求 1.编译内核5.0 2.qemu -kernel linux-5.0.1/a ...

最新文章

  1. NeurIPS 2020论文接收大排行!谷歌169篇第一、斯坦福第二、清华国内第一
  2. Xamarin.Forms中为WebView指定数据来源Source
  3. linux 产生0~1之间的随机数
  4. leetcode486. 预测赢家(dp)
  5. mysql服务器程序_MySQL服务器
  6. kettle时间维度_MySQL快速生成时间维度表
  7. java textarea append_JavaFX TextArea.append()导致java.lang.NullPointerException
  8. 学生信息管理系统问题集锦(三)
  9. error40无法打开到sql_技术分享|初识SQL优化之执行计划查看分析
  10. 【KDD20】图神经网络在生物医药领域的应用
  11. LU分解法python程序代码
  12. MaxScript 例子 渲染
  13. 破解极验(geetest)滑动验证码
  14. Live archive 4490 Help Bubu
  15. icp经营许可证怎么办?
  16. victoriaMetrics无法获取抓取target的问题
  17. Ant Design的入门使用教程
  18. Dom——隔行变色、分时显示问候语
  19. MySQL数据库表结构的设计
  20. Oracle EBS 工具栏按钮失效

热门文章

  1. springMvc注解之@ResponseBody和@RequestBody
  2. MySQL Router实现MySQL的读写分离
  3. C++ 类模板四(typename关键字)
  4. Ubuntu11.10配置Eclipse下Android开发环境
  5. C语言实现-双链表练习
  6. Qt使用UDp通信、套接字socket的成员函数bind()的作用
  7. js时间戳格式化成日期格式
  8. 计算数组的逆序对个数
  9. 《一江春水向东流》——任正非
  10. Developer Express控件组合中的GridControl控件,如何自动显示每一行的序号