为什么运营商>>不适用于我的char设备?

时间:2013-11-28 14:28:11

标签: c linux linux-device-driver

我目前正在学习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回调并负责offpread回调中的write,但它仍然无效。

1 个答案:

答案 0 :(得分:5)

您需要在写例程中处理O_APPEND>>运算符使用O_APPEND标志打开文件,该标志在每次写入操作之前请求驱动程序查找结尾。在您的情况下,mad_write例程应该检查文件标志,并在写入之前设置O_APPEND

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