正在学习写一个linux下的驱动和应用程序
read() write()ioctl()都没问题,但是调用llseek()就是进不去
驱动模块:
。。。。。。
static loff_t TEST_llseek(struct file *s_file,loff_t offset,int fromwhere)
{
printk("<k>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("<k>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.
哪位高手能够指点一下,为什么不能调用llseek,怎么才能正确实现? |