【发布时间】:2018-07-24 17:32:09
【问题描述】:
我编写了一个自定义系统调用,它比较两个整数并返回最大的一个。这是我的内核端代码:
max.c
#include <linux/kernel.h>
#include <linux/syscalls.h>
asmlinkage long sys_max(int num1, int num2)
{
if (num1 > num2)
{
return num1;
}
else
{
return num2;
}
}
这是我的用户空间代码:
最大.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;
}
它适用于正数,或者当一个为正数而另一个为负数时,但 max 在处理两个负数时总是返回 -1。我想知道这是否是因为 int->long 转换,但我似乎无法理解导致问题的原因。
【问题讨论】:
-
int max(int num1, int num2){}- 这是一个函数定义,而不是声明。你的意思是int max(int, int);? -
如果您将
max函数重命名为mymax,有什么变化吗? -
@melpomene 英语不是我的母语,所以我不确定这里的正确词是什么。但关键是函数max必须返回一个整数,并接收两个整数作为参数。
-
不,关键是您的标题中需要
;,而不是{}。 -
@melpomene 更改函数名称并没有改变任何内容。
标签: c linux linux-kernel int system-calls