file_operations中的.release行为问题

时间:2010-05-21 21:16:58

标签: linux-kernel kernel

我正在处理内核模块中的问题,该问题使用/ 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

1 个答案:

答案 0 :(得分:0)

release()不允许导致close()失败。

如果他们想要了解所有可能的错误,您可以要求您的用户空间程序在fsync()之前调用文件描述符上的close();然后在fsync()处理程序中实现最终的错误检查。