我目前正在学习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
回调并负责offp
和read
回调中的write
,但它仍然无效。
答案 0 :(得分:5)
您需要在写例程中处理O_APPEND
。 >>
运算符使用O_APPEND
标志打开文件,该标志在每次写入操作之前请求驱动程序查找结尾。在您的情况下,mad_write
例程应该检查文件标志,并在写入之前设置O_APPEND
。
请参阅manual definition here。我查看了Linux内核源代码中的示例,但很少有字符驱动程序实际处理O_APPEND
。我能找到的最好的例子是generic file code。