读文件时,出现invalid length提示,求高手指导下。

chen_q07 2011-12-28 07:14:43
static ssize_t reg_read_file(struct file* file, char __user *user_buf, size_t count, loff_t *ppos)
{
ssize_t ret = 0;
int i;
/*buf allocation*/
char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
if (NULL == buf)
return -ENOMEM;

/*copy reg to buf*/
ret += sprintf(buf, "scull registers\n");
for (i=0; i<ARRAY_SIZE(reg); i++)
{
ret += sprintf(buf+ret, "%4d = %8d\n", i, reg[i]);
}

if (ret >= PAGE_SIZE - 1)
{
ret = PAGE_SIZE - 1;
}
/*copy buf to user buf*/
loff_t pos = *ppos;
if (pos > ret || count==0)
{
kfree(buf);
return 0;
}
if (count > ret - pos)
count = ret - pos;

ret = copy_to_user(user_buf, buf+pos, count);/*ret = left count*/
if (ret == count)
{
kfree(buf);
return -EFAULT;
}
count -= ret;
*ppos = pos + count;
kfree(buf);
return count;
/*free buf*/
}

以上这段是我读文件操作。
当我用cat命令读一个文件内容时,出现以下结果
# cat reg
scull registers
0 = 100
1 = 0
2 = 0
3 = 0
4 = 0
5 = 0
6 = 0
7 = 0
8 = 0
9 = 0
10 = 200
11 = 0
12 = 0
13 = 0
14 = 0
15 = 0
16 = 0
17 = 0
18 = 0
19 = 0
20 = 300
reg: invalid length
为什么会有invalid length呢?
...全文
522 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧