创建新的Linux系统调用时,是否需要对libc进行修改?
新Linux系统调用是否需要修改libc?
答案是不需要强制修改,但修改libc能让新系统调用的使用更便捷,具体分两种情况:
直接调用无需修改libc
开发者完全可以通过syscall()函数手动触发新系统调用,不需要改动libc的任何代码。比如假设你的新系统调用号是350,可以这么封装调用:#include <unistd.h> #include <sys/syscall.h> #define __NR_my_new_syscall 350 long my_new_syscall(int arg) { return syscall(__NR_my_new_syscall, arg); }上层代码只需调用这个自定义的
my_new_syscall函数即可,全程不用碰libc。修改libc提升易用性
如果希望新系统调用能像标准库函数(比如open()、write())一样被直接调用,那就要修改libc:- 在libc中添加对应的封装函数,负责参数转换、触发系统调用(可以用
syscall()或直接写汇编) - 更新libc的头文件,添加该函数的声明,让开发者只需
#include头文件就能调用 - 这种方式能简化上层应用的代码,不用开发者自己管理系统调用号和参数传递细节
- 在libc中添加对应的封装函数,负责参数转换、触发系统调用(可以用
如果你的新系统调用是面向社区的通用功能,建议向glibc、musl等主流libc提交修改补丁;如果只是内部测试或自用,直接用syscall()调用就足够,没必要修改libc。
内容的提问来源于stack exchange,提问作者Franc
相关产品推荐
相关产品推荐

