Linux– 为什么自定义系统调用与负数无法正常工作?

Linux– 为什么自定义系统调用与负数无法正常工作?,第1张

概述我写了一个自定义系统调用,比较两个整数并返回最大的整数.这是我的内核端代码:max.c#include <linux/kernel.h> #include <linux/syscalls.h> asmlinkage long sys_max(int num1, int num2) { if (num1 > num2)

我写了一个自定义系统调用,比较两个整数并返回最大的整数.这是我的内核端代码:

max.c

#include 

这是我的用户空间代码:

max.h

#include 

我正在使用这个小程序来测试系统调用:

#include 

它对正数很有用,或者当一个是正数而另一个是负数时,但是当处理两个负值时,max总是返回-1.我想知道这是否是因为int->长转换,但我似乎无法理解导致问题的原因.最佳答案如果系统调用返回负值,则将其视为错误,并在libc中调用特殊错误处理代码.也就是说,返回值被否定并移入errno全局变量,系统调用的返回值变为-1.

实际上,在阅读这篇文章的时候,我发现在linux上,@L_403_0@,但是如果你希望你的函数能够处理任何可能的值,那么它既不可移植也不会有用.

简而言之,您无法安全地使用系统调用的返回值来返回可能为负值的值.通常的惯例是传递指向目标变量的指针来保存结果,并保留成功/失败的返回码.请注意,使用系统调用执行此 *** 作时,您将使用来自内核空间的用户空间指针,因此编写结果需要copy_to_user. 总结

以上是内存溢出为你收集整理的Linux – 为什么自定义系统调用与负数无法正常工作?全部内容,希望文章能够帮你解决Linux – 为什么自定义系统调用与负数无法正常工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1046998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)