linux内核杂记(16)-系统调用(3)
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)相关推荐
- linux内核杂记(13)-系统调用(1)
1.系统调用 在用户空间进程和硬件 设备之间增加了一具中间层.其作用如下: (1)为用户空间提供了一种硬件 的抽象接口. (2)保证了系统的稳定 和安全 (3)每个进程 运行在虚拟系统中,而在用户空间 ...
- linux内核杂记(15)-系统调用(2)
1.内核在执行系统调用时,处于进程上下文状态,current指针指向调用 系统调用的进程. 2.在进程上下文中 (1)内核可休眠(比如在系统调用阻塞或显式调用 schedule()时). 休眠说明系统 ...
- 跟踪分析Linux内核5.0系统调用处理过程
跟踪分析Linux内核5.0系统调用处理过程 学号384 原创作业转载请注明出处+中国科学技术大学孟宁老师的Linux操作系统分析 https://github.com/mengning/linuxk ...
- Linux内核深入理解系统调用(3):open 系统调用实现以及资源限制(setrlimit/getrlimit/prlimit)
Linux内核深入理解系统调用(3) open 系统调用实现以及资源限制(setrlimit/getrlimit/prlimit) rtoax 2021年3月 对原文进行了5.10.13的代码分析. ...
- Linux内核深入理解系统调用(1):初始化-入口-处理-退出
Linux内核深入理解系统调用(1):初始化-入口-处理-退出 rtoax 2021年3月 1. Linux 内核系统调用简介 这次提交为 linux内核解密 添加一个新的章节,从标题就可以知道, 这 ...
- linux内核打开prntk,操作系统实验一向Linux内核增加一个系统调用.docx
操作系统实验一: 向Linux内核增加一个系统调用 xx 711103xx 2012年3月18日 一.实验目的 通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法:掌握用 户程 ...
- Linux内核深入理解系统调用(2):vsyscall 和 vDSO 以及程序是如何运行的(execve)
Linux内核深入理解系统调用(2) vsyscall 和 vDSO 以及程序是如何运行的(execve) rtoax 2021年3月 1. vsyscalls 和 vDSO 这是讲解 Linux 内 ...
- linux内核syscall_define6,Syscall系统调用Linux内核跟踪
在Linux的用户空间,我们经常会调用系统调用,下面我们跟踪一下read系统调用,使用的Linux内核版本为Linux2.6.37.不同的Linux版本其中的实现略有不同. 在一些应用中我们可以看到下 ...
- 分析Linux内核5.0系统调用处理过程
学号: 363 本实验来源 https://github.com/mengning/linuxkernel/ 一.实验要求 1.编译内核5.0 2.qemu -kernel linux-5.0.1/a ...
最新文章
- NeurIPS 2020论文接收大排行!谷歌169篇第一、斯坦福第二、清华国内第一
- Xamarin.Forms中为WebView指定数据来源Source
- linux 产生0~1之间的随机数
- leetcode486. 预测赢家(dp)
- mysql服务器程序_MySQL服务器
- kettle时间维度_MySQL快速生成时间维度表
- java textarea append_JavaFX TextArea.append()导致java.lang.NullPointerException
- 学生信息管理系统问题集锦(三)
- error40无法打开到sql_技术分享|初识SQL优化之执行计划查看分析
- 【KDD20】图神经网络在生物医药领域的应用
- LU分解法python程序代码
- MaxScript 例子 渲染
- 破解极验(geetest)滑动验证码
- Live archive 4490 Help Bubu
- icp经营许可证怎么办?
- victoriaMetrics无法获取抓取target的问题
- Ant Design的入门使用教程
- Dom——隔行变色、分时显示问候语
- MySQL数据库表结构的设计
- Oracle EBS 工具栏按钮失效
热门文章
- springMvc注解之@ResponseBody和@RequestBody
- MySQL Router实现MySQL的读写分离
- C++ 类模板四(typename关键字)
- Ubuntu11.10配置Eclipse下Android开发环境
- C语言实现-双链表练习
- Qt使用UDp通信、套接字socket的成员函数bind()的作用
- js时间戳格式化成日期格式
- 计算数组的逆序对个数
- 《一江春水向东流》——任正非
- Developer Express控件组合中的GridControl控件,如何自动显示每一行的序号