我寫了一個自定義系統調用,用於比較兩個整數並返回最大值的賦值。這裏是我的內核端代碼(max.c):Linux - 爲什麼自定義系統調用不能正確使用負數?
#include <linux/kernel.h>
#include <linux/syscalls.h>
asmlinkage long sys_max(int num1, int num2)
{
if (num1 > num2)
{
return num1;
}
else
{
return num2;
}
}
這是我的用戶空間代碼(max.h):
#include <unistd.h>
#define SYS_MAX 323
int max(int num1, int num2)
{
int maxnumber = syscall(SYS_MAX, num1, num2);
return maxnumber;
}
我用這個小程序來測試系統撥打:
#include <stdio.h>
#include <max.h>
int main()
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("%d", max(a, b));
return 0;
}
它爲正數偉大的工作,或者當一個爲正,另一個爲負,但最大總是返回-1兩個負值的時候。我想知道這是由於int-> long轉換,但我似乎無法理解是什麼導致了這個問題。
int max(int num1,int num2){}' - 這是一個函數定義,而不是聲明。你是不是指'int max(int,int);'? – melpomene
如果您將'max'函數重命名爲'mymax',是否會發生任何變化? – melpomene
@melpomene英語不是我的母語,所以我不確定這裏有什麼合適的詞。但重點是,函數max必須返回一個整數並接收兩個整數作爲參數。 –