我目前正在学习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,但仍然无法正常工作。

最佳答案

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

参见manual definition here。我浏览了Linux内核示例,但实际上很少有字符驱动程序处理O_APPEND。我能找到的最好的例子是generic file code

08-27 17:48