簡體   English   中英

Linux kernel function 沒有返回正確的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM