C - 在设备文件中从cat无限读取

时间:2014-10-21 10:05:26

标签: c linux character device cat

我一直有一些令人头疼的问题,因为它没有从我的读取函数接收到函数的结尾,所以猫不会关闭。我怎样才能实现读取结束以便读取文件使用cat只能在终端中为每个命令产生1个输出?

功能。这是我写的内核read()函数:

static ssize_t dev_read(struct file *file, char *buf, size_t count, loff_t *ppos)
{
char tmp_buf[MAX_BUF_SIZE]; //defined as 100
int bLen=0;
sprintf(tmp_buf, "Some message");
bLen = strlen(tmp_buf);

if(copy_to_user(buf,tmp_buf, bLen)){
     return -EFAULT;
}

 return bLen;
 }

1 个答案:

答案 0 :(得分:1)

我回答是因为我在搜索中发现了这一点。

Cat不断读取,直到它得到空响应。一旦它完成了一些数据,它会回来并要求“还有其他的东西吗?”#34;您的模块对其说“是”并再次向其发送数据。您需要打破链并让它发送空响应。最好的方法是放置

if(*ppos > 0){
    return 0;
}

在函数的开头,并在退出之前将要发送回的数据的长度添加回* ppos。