内核态下没有fgets函数,如果要按行读取文件,需要用户自己实现。
static char *read_line(char *buf, int buf_len, struct file *fp)
{
int ret;
int i = 0;
mm_segment_t fs;
fs=get_fs();
set_fs(KERNEL_DS);
ret = fp->f_op->read(fp, buf, buf_len, &(fp->f_pos));
set_fs(fs);
if (ret <= 0)
return NULL;
while(buf[i++] != '\n' && i < ret);
if(i < ret) {
fp->f_pos += i-ret;
}
if(i < buf_len) {
buf[i] = 0;
}
return buf;
}