我应该使用哪个错误值?

前端之家收集整理的这篇文章主要介绍了我应该使用哪个错误值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在为 Linux内核构建一个模块.我的工作版本是3.8-rc3.我的工作让我实现一些ioctl()命令.如你所知,我的命令应该返回一个适当的错误代码来描述执行过程中出了什么问题.这似乎很简单,但我有一个用例,我无法弄清楚我应该返回哪个错误代码.

基本上,我希望用户能够为给定的设备设置加密密钥.我的模块将密钥存储在R-B树中,由设备唯一标识符(基本int)索引.如果“目标”设备已经在树中有条目,则应该更新此条目,否则,该模块将使用请求的加密密钥简单地将新分配的条目添加到该设备的树中.也就是说,尝试设置密钥时可能会发生多项事件:

>模块内部的某些内容可能使用用户想要更新的加密密钥:模块返回EBUSY错误.
>没有条目和分配失败:ENOMEM错误.
>该模块正在释放其资源.现有的密钥条目可能被标记删除(该条目有一个垂死的标志来表示这一点):内部我目前使用EPERM错误代码,因为调用者没有“权限”来更改条目被破坏时.

正如我所说,对于后一种情况,我使用EPERM错误代码,但我有这种感觉是错误的,我不知道我应该为此目的使用哪个错误代码.欢迎任何建议!

我还指定了linux标签,因为ioctl()可以在用户空间应用程序中使用.

编辑:阅读评论和答案后,我想我会这样做:

>当模块释放资源时,将返回ESHUTDOWN.
>只有目标键被销毁时,而其余的
树仍然健康,EACCES将被使用.

解决方法

ESHUTDOWN怎么样? (运输端点关机后无法发送)

另一个选项是ENXIO(没有这样的设备或地址).这不是100%准确,因为设备仍然在那里,但它传达错误的意义(它不再可用).

一个简单的选择是ENOTSUP(操作不支持),但是听起来更像“方法未实现”

EPERM听起来更好,但通常与“你没有权限/没有权限”而不是“现在不能这样做”一起使用.

ESTALE(过时的文件句柄)会很好,但它是NFS相关的.

猜你在找的C&C++相关文章