我正在处理内核模块中的问题,该问题使用/ proc条目从用户空间获取数据。
我为自己定义的/ proc条目设置了open / write / release条目,并且很好地管理它以从用户空间获取数据。 我很好地处理了打开/写入函数中的错误,并且用户可以看到它们是open / fopen或write / fwrite / fprintf错误。
但有些错误只能在收盘时检查(因为这是所有数据都可用的时间)。在这些情况下,我返回一个不同于0的东西,我应该以某种方式将值'close'或'fclose'返回给用户。
但无论我返回什么价值,我的关闭都表现得如果一切都好。 为了确保我用一个简单的'return(-1);'替换了所有的release()代码。并编写了一个打开/写入/关闭/ proc条目的程序,并打印关闭返回值(和errno)。无论我给出什么价值,它总是返回'0'。
行为与'fclose'相同,或者使用shell机制(echo“...”> / proc / my / entry)。
有关这种奇怪行为的任何线索,并非我发现的许多教程中声称的行为?
BTW我在64位系统上使用RHEL5内核(2.6.18,redhat modified)。
感谢。
的Yannick
答案 0 :(得分:0)
release()
不允许导致close()
失败。
如果他们想要了解所有可能的错误,您可以要求您的用户空间程序在fsync()
之前调用文件描述符上的close()
;然后在fsync()
处理程序中实现最终的错误检查。