/procファイルシステムを介してカーネルモジュールで作成されたリンクリストを読みたいと思います。私のユーザ空間プログラムは、読み込みのために/ proc/file1を開くためのfopen()呼び出しを含み、fread()を実行してループごとにリンクリストからノードを読み出すwhileループを使用します。Linuxカーネルモジュールの/ procファイルシステム経由でリンクリストを読むことができません
ユーザ空間のプログラムが含まれています
char buffer[100];
FILE* fp = fopen("/proc/file1","r");
while(fread(buffer,sizeof(char),100,fp)){
printf("%s",buffer);
// buffer is cleared before next iteration
}
fclose(fp);
カーネルモジュールがすべてのノードにノードアドレスを開始リンクされたリストが呼び出さ変数に格納されているタイプ
struct node{
int data;
struct node* next;
}
であるリンクされたリストを作成しますリスト。私はカーネルモジュールにread_procため、次のコードを書いた
:ユーザ空間プログラムを実行するには
int read_func(char *page,char **start,off_t off,int count,int *eof, void* data)
{
static struct node* ptr = NULL;
static int flag = 0;
int len;
if(flag == 0){
flag = 1;
ptr = LIST;
}
if(ptr == NULL){
// empty linked list or end of traversal
*eof = 1;
flag = 0;
return 0;
}
if(ptr != NULL){
len = sprintf(page, "%d", ptr->data);
ptr = ptr->next;
}
return len;
}
をリンクリストは、2つの以上のノードが含まれている場合、一つのノードのみが読み込まれます。
誰でも助けてください。
ありがとうございます。
'/ proc/file1'の16進数のような情報を提供できますか? –
あなたのユーザコードスニペットの 'printf'に関する小さなメモ:バッファの後ろにゴミを印刷する場合は、読み込みバッファにゼロ(文字 '' \ 0 '')が含まれていない限り。 'read'から返されたサイズを取得し、バッファを適切に終了します。 –