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

我一直有一些头痛无法从cat读取(cat没有关闭,因为它没有从我的读取函数接收函数结束。我怎样才能实现读取结束,以便用cat读取文件只会产生终端每个命令输出1个?

function。 这是我写的内核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; } 

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

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

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

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