当前位置: 技术问答>linux和unix
新手请教一个很简单的写程序代码
来源: 互联网 发布时间:2016-06-06
本文导语: static ssize_t ds1302_write(struct file *fp, const char *buf, size_t count, loff_t *ptr) { int total; char val; #if 0 printk("ds1302_write(buf=%x,count=%d)n", (int) buf, count); #endif if (fp->f_pos >= DS1302_MSIZE) return(0); if (count > (DS1302_MSIZE ...
static ssize_t ds1302_write(struct file *fp, const char *buf, size_t count, loff_t *ptr)
{
int total;
char val;
#if 0
printk("ds1302_write(buf=%x,count=%d)n", (int) buf, count);
#endif
if (fp->f_pos >= DS1302_MSIZE)
return(0);
if (count > (DS1302_MSIZE - fp->f_pos))
count = DS1302_MSIZE - fp->f_pos;
for (total = 0; (total f_pos + total), val);
}
fp->f_pos += total;
return(total);
}
代码如上,搞半天没明白那个 count 值是哪来的,整篇代码里只有下面那段涉及到ds1302_write
static struct file_operations ds1302_fops =
{
owner: THIS_MODULE,
read: ds1302_read,
write: ds1302_write,
};
这个代码是老师给DS1302驱动的,叫我自己回去看看懂再写个DS1307的驱动,有哪位大侠知道count值 是哪来的吗?还是这个程序有问题?另外
owner: THIS_MODULE,
read: ds1302_read,
write: ds1302_write,
分别代表什么意思 谢谢哈 附件传不上代码。。
{
int total;
char val;
#if 0
printk("ds1302_write(buf=%x,count=%d)n", (int) buf, count);
#endif
if (fp->f_pos >= DS1302_MSIZE)
return(0);
if (count > (DS1302_MSIZE - fp->f_pos))
count = DS1302_MSIZE - fp->f_pos;
for (total = 0; (total f_pos + total), val);
}
fp->f_pos += total;
return(total);
}
代码如上,搞半天没明白那个 count 值是哪来的,整篇代码里只有下面那段涉及到ds1302_write
static struct file_operations ds1302_fops =
{
owner: THIS_MODULE,
read: ds1302_read,
write: ds1302_write,
};
这个代码是老师给DS1302驱动的,叫我自己回去看看懂再写个DS1307的驱动,有哪位大侠知道count值 是哪来的吗?还是这个程序有问题?另外
owner: THIS_MODULE,
read: ds1302_read,
write: ds1302_write,
分别代表什么意思 谢谢哈 附件传不上代码。。
|
这个count是从vfs传过来的,
(gdb) l vfs_read
277 ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
系统调用 read()-->sys_read()-->vfs_read()-->各自驱动的read