Я хочу прочитать связанный список, созданный модулем ядра через файловую систему / proc.Моя программа пользовательского пространства будет содержать вызов fopen () для открытия / proc / file1 для чтения и будет использовать цикл while для выполнения fread () для чтения узла из связанного списка в каждом цикле.
ПользовательПространственная программа содержит:
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;
}
Адрес начального узла связанного списка хранится в переменной с именем LIST.
Я написал следующий код для 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;
}
При выполнении программы пространства пользователя читается только один узел, когда связанный список содержит два или более узлов.
Может кто-нибудь помочь, пожалуйста.
Спасибо.