我正在为Linux 2.6.39内核进行SYSTEM CALL。
我已完成文件中的所有编辑。现在当我尝试编译内核时,它显示了这个错误:
错误:stdio.h:没有这样的文件或目录
如果我删除stdio.h,系统调用是否会工作???
我的代码是
#include<stdio.h>
#include <linux/linkage.h>
asmlinkage long sys_atvfcfs(int at[], int bt[], int n)
{
int i=0;
int j,t,wt[n],sum,q;
float avgwt;
for(j=i+1;j<n;j++)
{
if(at[i]>at[j])
{
t=at[i];
at[i]=at[j];
at[j]=t;
q=bt[i];
bt[i]=bt[j];
bt[j]=q;
}
}
wt[0]=0;
sum=0;
for(i=0;i<n-1;i++)
{
wt[i+1]=wt[i]+bt[i];
sum=sum+(wt[i+1]-at[i]);
}
avgwt=sum/n;
return avgwt;
}
答案 0 :(得分:2)
我不知道你的系统调用应该做什么,但它不会调用stdio.h
中声明的任何函数。 (事实上,它根本不会调用任何函数。)因此删除该行应该是安全的。
stdio.h
是一个C库标题。它在普通的C程序中可用,但内核是不同的。内核是独立的;它不能依赖于用户空间库,因为用户空间库依靠内核来完成他们的工作。相反,内核有自己的内部有用函数库,如果你正在进行内核开发,你需要了解它们。
答案 1 :(得分:1)
在内核编程中你不需要stdio.h。如果您需要打印某些内容,请使用printk
代替printf
。
答案 2 :(得分:1)
我没有看到您的代码中使用的任何io函数,因此您不需要包含stdio.h