shell507 于 2011-10-21 08:42:05发表:
非常感谢! 我编了个测试程序 驱动模块: 。。。。。。 static loff_t TEST_llseek(struct file *s_file,loff_t offset,int fromwhere) { printk("entry llseek\n"); return 0; } ssize_t TEST_write(struct file *s_file, const char *s_buffer, size_t s_size, loff_t *s_loff) { printk("entry write\n"); return 0; } static struct file_operations TEST_fops= { ioctl : TEST_ioctl, llseek: TEST_llseek, write : TEST_write, read : TEST_read, }; 应用程序: void main() { 。。。。 if((fd=open("/dev/TEST",O_RDWR))==-1) { perror("open eror!!!\n"); exit(1); } else printf("open ok!!!\n"); while(1) { i=llseek(fd,0,0); printf("i is %d\n",i); write(fd,buffer,BYTEn); sleep(1); } } 运行后,write能够正确输出(read,ioctl也没问题),可就是没有llseek后的打印信息, 并且输出“i is -1”,这说明根本没正确进入,否则的话只能返回0。不知道为什么?
lijiang 于 2011-10-20 18:17:28发表:
楼主的问题涉及与函数read相关的函数lseek(),其原型为lseek(文件号fd,位移量,文件起始点); 参数起始点用0,1,2分别代表“文件开始位置“、”文件当前位置“、”文件末尾“。 所以只需将位置指针移到指定读写的位置,然后读写操作。具体为: lseek(fd,m,0); read(fd,buff,n);
shell507 于 2011-10-21 08:42:05发表:
非常感谢!entry llseek\n");
entry write\n");
我编了个测试程序
驱动模块:
。。。。。。
static loff_t TEST_llseek(struct file *s_file,loff_t offset,int fromwhere)
{
printk("
return 0;
}
ssize_t TEST_write(struct file *s_file, const char *s_buffer, size_t s_size,
loff_t *s_loff)
{
printk("
return 0;
}
static struct file_operations TEST_fops=
{
ioctl : TEST_ioctl,
llseek: TEST_llseek,
write : TEST_write,
read : TEST_read,
};
应用程序:
void main()
{
。。。。
if((fd=open("/dev/TEST",O_RDWR))==-1)
{
perror("open eror!!!\n");
exit(1);
}
else
printf("open ok!!!\n");
while(1)
{
i=llseek(fd,0,0);
printf("i is %d\n",i);
write(fd,buffer,BYTEn);
sleep(1);
}
}
运行后,write能够正确输出(read,ioctl也没问题),可就是没有llseek后的打印信息,
并且输出“i is -1”,这说明根本没正确进入,否则的话只能返回0。不知道为什么?
lijiang 于 2011-10-20 18:17:28发表:
楼主的问题涉及与函数read相关的函数lseek(),其原型为lseek(文件号fd,位移量,文件起始点);
参数起始点用0,1,2分别代表“文件开始位置“、”文件当前位置“、”文件末尾“。
所以只需将位置指针移到指定读写的位置,然后读写操作。具体为:
lseek(fd,m,0);
read(fd,buff,n);