featurelles ой блин, забыл. Задай любое значение, какими кусками ты хочешь его получать. Лучше наверное размер одной страницы - 4096.
featurelles Если в одно целое потом собрать хочешь, то объяви какой-нить char file, а потом в этом цикле плюсуй к нему строку buf через strncat. главное буфер не забывай очищать на каждом шаге. Тело тогда будет примерно такое { offset+=ret; strncat( file, buf, ret); memset( buf, 0, buf_len); }
Код (Text): typedef struct { char * name; void * address; } ksymstr_t; static int sym_resolve(ksymstr_t * s) { int result = 0; char * line, * str; struct file * file; mm_segment_t oldfs; oldfs = get_fs(); set_fs(KERNEL_DS); line = kmalloc(PAGE_SIZE, GFP_KERNEL); if (!line) { result = -ENOMEM; goto return_result; } file = filp_open("/proc/kallsyms", O_RDONLY, 0); if (IS_ERR_OR_NULL(file)) { result = -EINVAL; goto return_result_free; } file->f_pos = 0; for (str = line; vfs_read(file, str, 1, &file->f_pos) == 1; str++) { if (*str == '\n') { *str = 0; if (sym_match_line(line, s->name)) { if (sscanf(line, "%lx", (ulong *)&s->address) != 1) result = -EINVAL; break; } str = line - 1; /* as there will be (str++) */ } cond_resched(); } filp_close(file, 0); return_result_free: kfree(line); return_result: set_fs(oldfs); return result; }