0

我正在为 linux 2.6.39 内核进行系统调用。

我已完成文件中的所有编辑。现在,当我尝试编译内核时,它显示此错误:

错误: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;


}
4

3 回答 3

2

我不知道你的系统调用应该做什么,但它不会调用任何在stdio.h. (事实上​​,它根本不调用任何函数。)因此删除该行应该是安全的。

stdio.h是一个 C 库头文件。它在普通的 C 程序中可用,但内核不同。内核是自包含的;它不能依赖用户空间库,因为用户空间库依赖于内核来完成它们的工作。相反,内核有自己的内部有用函数库,如果您正在进行内核开发,您会想了解这些函数库。

于 2012-04-27T06:35:21.553 回答
1

在内核编程中不需要 stdio.h。如果您需要打印某些内容,请使用printk而不是printf.

于 2012-04-27T06:36:55.470 回答
1

我没有看到您的代码中使用了任何 io 函数,因此您不需要包含stdio.h

于 2012-04-27T06:38:03.333 回答