0

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;


}
4

3 に答える 3

2

あなたのシステムコールが何をするべきかはわかりませんが、で宣言された関数を呼び出しませんstdio.h。(実際には、関数はまったく呼び出されません。)したがって、その行を削除しても安全なはずです。

stdio.hC ライブラリのヘッダーです。通常の 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 に答える