【问题标题】:Why the operator >> doesn't work with my char device?为什么运算符 >> 不适用于我的 char 设备?
【发布时间】:2013-11-28 14:28:11
【问题描述】:

我目前正在学习 linux 设备驱动程序。我从一个示例驱动程序开始,它只是一个内存缓冲区。

我的代码在我的github 上可用。

我通过这样做来测试我的驱动程序:

# echo "Hello World" > /dev/mad
# cat /dev/mad
Hello World

一切顺利,但是当我使用重定向运算符附加某些内容 (>>) 时,行为不是我所期望的。

# echo foo > /dev/mad
# echo bar >> /dev/mad
# cat /dev/mad
bar

我希望有:

foo
bar

我已经实现了llseek 回调并处理了readwrite 回调中的offp,但它仍然不起作用。

【问题讨论】:

  • 您是否编写了驱动程序以正确支持所有打开模式和多次写入?
  • 你是对的。我忘记了 open 回调中标志 O_APPEND 的支持。现在,一切正常!谢谢

标签: c linux linux-device-driver


【解决方案1】:

您需要在写入例程中处理O_APPEND>> 操作符打开带有O_APPEND 标志的文件,该标志要求您的驱动程序在每次写入操作之前查找到末尾。在您的情况下,您的mad_write 例程应该检查文件标志,如果设置了O_APPEND,则在写入之前寻找到结尾。

请参阅manual definition here。我查看了 Linux 内核源代码作为示例,但实际上很少有字符驱动程序能够处理 O_APPEND。我能找到的最好的例子是generic file code

【讨论】:

  • 那是因为大多数字符设备都是面向流而不是面向存储的,这意味着在写入时附加自然是唯一可能的操作。
  • 确实,看完说明书,我已经在write回调中做了fix
猜你喜欢
  • 2014-10-10
  • 2020-12-27
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多