我目前正在学习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
,但仍然无法正常工作。 最佳答案
您需要在写例程中处理O_APPEND
。 >>
运算符使用O_APPEND
标志打开文件,该标志要求您的驱动程序在每次写操作之前搜索到结尾。在您的情况下,您的mad_write
例程应检查文件标志,并在写入后(如果已设置O_APPEND
的情况下)查找结尾。
参见manual definition here。我浏览了Linux内核示例,但实际上很少有字符驱动程序处理O_APPEND
。我能找到的最好的例子是generic file code。