Я хочу прочитать связанный список, созданный модулем ядра через файловую систему/proc. Моя программа пространства пользователя будет содержать вызов fopen() для открытия/proc/file1 для чтения и будет использовать цикл while для выполнения fread() для чтения узла из связанного списка в каждом цикле.Не удается прочитать связанный список через файловую систему/proc в модуле ядра Linux
Программа пользовательского пространства содержит:
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;
}
На выполнение программы в пространстве пользователя, только один узел считывается, когда связанный список содержит два или более узлов.
Может ли кто-нибудь помочь.
спасибо.
Можете ли вы предоставить дополнительную информацию, например, hexdump '/ proc/file1'? –
Небольшое примечание о вашей 'printf' в фрагменте кода пользователя: если буфер чтения не содержит нуль (символ' '\ 0''), если будет печатать мусор после буфера. Получите возвращаемый размер из 'read' и правильно завершите буфер. –