[英]Linux kernel function Doesn't return correct value?
我已更改 linux 內核以添加此 function (在添加新的名為 my_field 的 long 類型的失敗后):
asmlinkage long sys_set_weight(long weight) {
if (weight < 0)
{
return -EINVAL; // -22
}
current->my_field = weight;
return 0;
}
在 syscall_64.tbl 我有:
334 common set_weight sys_set_weight
在 syscalls.h 我有:
asmlinkage long sys_set_weight(long weight);
在 C 當我寫道:
int set_weight(int weight) {
long r = syscall(334, weight);
return r;
}
int main () {
int x = set_weight(-3);
cout << "set_weight returns: " << x << endl;
return 0;
}
但我看到以下打印:
set_weight 返回:0
這是為什么? 我正在重新調整-EINVAL
不是 0
當您調用syscall
時,您正在通過...
您通過...
傳遞一個int
,但 function 需要一個long
。
我不確定為什么在調用需要long
時讓set_weight
接受int
,但是在傳遞它之前沒有將它轉換為long
的原型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.