我正在编写一个通过ioctl
与用户应用程序通信的内核模块。通信只是单向的 - 也就是说,在正常情况下不需要输出。我的问题是 - 我应该如何向用户应用程序报告错误?
例如,我的模块接受进程ID作为输入。假设PID无效。我在errno.h
中找不到匹配的错误代码,因此我需要另一种报告方法。我可以想到几个方面:
INVALID_PID
,返回-INVALID_PID
作为ioctl
调用的返回值,并在用户应用程序中处理ioctl
从用户应用程序接收参数 - 我可以在那里存储错误消息这样做的标准方法是什么?
谢谢!
答案 0 :(得分:2)
通常当ioctls
失败时,他们会使用include/uapi/asm-generic/errno-base.h
中的标准代码。然后记录每个特定ioctl
的每个错误的含义。
在您的情况下,您可能希望返回ENOENT
或EINVAL
。如果您ioctl
的参数为PID
,那么ENOENT
意味着此PID
不存在就足够明显了。而且你最好在某个地方记录这种行为。在man console_ioctl
中可以找到一个很好的例子。