我是靠谱客的博主 听话火车,最近开发中收集的这篇文章主要介绍linux 系统调用返回 1,Linux内核系统调用返回-1而不是{-1,-256},觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我是一个内核新手,面临着一个奇怪的问题.我编写了一个概念验证计算器系统调用,虽然它适用于大多数计算,但当SUBTRACTION结果介于-1到-256之间时它返回-1.如果有人可以对可能发生的事情有所了解,那就会很感激.下面是系统调用代码.

SYSCALL_DEFINE3(calc, int, a, int, b , char, op) {

int res_int;

switch(op) {

case '+': res_int = a + b;

break;

case '-': res_int = a - b;

break;

case '*': res_int = a * b;

break;

case '/': res_int = (a*1000) / b;

break;

}

printk(KERN_INFO "KERNEL CALC RESULT : %d %c %d = %ld",a, op, b, res_int);

return res_int;

}

编辑:

内核版本:Android Linux Kernel 3.10.xxx.

平台:Nexus7 ARM EABI.

我不明白的是它失败的原因. errno完全没用,因为它将-res_int设置为errno.另外,我不明白为什么只有当res_int为{-1,-256}时才会失败.

a = 1200,b = 1300 op =’ – ‘=> res_int = -100是printk打印-100的示例,但在我的用户空间应用程序中,我收到-1.

看起来当res_int为{-1,-256}时,errno被设置为-res_int.

root@android:/data/local # ./calc

Please enter request in 'num1 oper num2' format:

2.45 - 2.2

returned from syscall with res_int = 250

errno = 22, strerror(errno) = Invalid argument

Calculator result = 0.250000

root@android:/data/local # ./calc

Please enter request in 'num1 oper num2' format:

2.2 - 2.45

returned from syscall with res_int = -1

errno = 250, strerror(errno) = Unknown error 250

Calculator result = -0.001000

root@android:/data/local #

最后

以上就是听话火车为你收集整理的linux 系统调用返回 1,Linux内核系统调用返回-1而不是{-1,-256}的全部内容,希望文章能够帮你解决linux 系统调用返回 1,Linux内核系统调用返回-1而不是{-1,-256}所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部