【发布时间】:2014-12-16 12:30:42
【问题描述】:
我一直对 cat 的无限读取感到头疼(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;
}
【问题讨论】:
-
数组 tmp_buf[] 尚未初始化,因此包含垃圾。因此,strlen[tmp_buf);几乎可以返回任何值(取决于随机 '\0' 碰巧所在的位置。也许您的意思是:bLen = sizeof tmp_buf; ?
-
见上面的编辑。在 tmp_buf 中添加了“一些消息”。我需要一种方法来告诉 cat 只从设备读取一次而不是无限次。
标签: c linux character device cat