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>
然后編寫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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring boot----简单入门
- 下一篇: Java基础面试题与答案