mac kernel-extension的错误代码含义是什么?
我计划约在Mac屯内核扩展,我用的是API proto_register_plumber
喜欢如下:mac kernel-extension的错误代码含义是什么?
err = proto_register_plumber(PF_INET, IFNET_FAMILY_TUN, method_attach, method_detach); if (err) {
printf("error code is : %d\n", err);
}
在一个MAC(10.13),它返回17,它意味着什么?我该如何解决它?
我阅读了关于https://developer.apple.com/documentation/kernel/1532491-proto_register_plumber?language=objc的API文档,但我没有发现任何有关错误代码的含义。
回答:
17
几乎肯定是errno
,特别是因为这是来自KPI的BSD部分。如果您在errno.h看你会发现,它对应于EEXIST
:
#define EEXIST 17 /* File exists */
在你的API调用的情况下,这可能意味着已经是你想注册登记的事情的东西。我不熟悉的proto_register_plumber()
功能,但非常快看its source code显示功能,这似乎证实了我的怀疑开始靠近下列检查:
lck_mtx_lock(proto_family_mutex); TAILQ_FOREACH(proto_family, &proto_family_head, proto_fam_next) {
if (proto_family->proto_family == protocol_family &&
proto_family->if_family == interface_family) {
lck_mtx_unlock(proto_family_mutex);
return (EEXIST);
}
}
难道说:
- 你以前注册过处理程序,卸载了你的kext,它没有注销它,然后你重新加载了你的kext,试图重新注册它?在这种情况下,重新启动(并修复kext stop功能!)应该修复它。
- 另一个加载的kext已经注册了它自己的处理程序?如果是这样,请尝试卸载可能的候选人。
- xnu内核已经为此协议族提供了默认处理程序?也许你需要以不同的方式去做你想要做的事情。
以上是 mac kernel-extension的错误代码含义是什么? 的全部内容, 来源链接: utcz.com/qa/265326.html