3

我尝试通过以下代码在 MAC OS X 10.7 (lion) 中注册 network_change 事件:

#define kNotifySCNetworkChange "com.apple.system.config.network_change"
void init()
{

   status = notify_register_check(kNotifySCNetworkChange, &token);
   if (status != NOTIFY_STATUS_OK)
   {
       cout << "Event Registration failed" <<endl;
   }
   cout << "Event Registration Success" << endl;

}

......

如果我在示例程序中使用此代码,则它已成功注册。如果我在我的应用程序中使用它,notify_register_check() 函数返回状态1000000 (NOTIFY_STATUS_FAILED)。此外,返回的 errno 为 0。

注意:我的应用程序在 Leopard 和 Snow Leopard 中运行没有任何问题(注册成功)

我用谷歌搜索了这个状态,但找不到相关信息。谁能告诉我这个 NOTIFY_STATUS_FAILED 在哪些情况下返回?


我最近观察到的另一件事是:我们在我的应用程序中使用了fork()系统调用。当我尝试在父进程中注册时,事件注册成功。但是子进程中的事件注册失败。为什么它在子进程中失败???任何想法!!!

4

1 回答 1

0

errno 为 0 因为通知 API 不是系统调用,而是 Mach API 调用。使用 mach_error () 了解更多细节。叉子不应该是一个问题(它也克隆了马赫端口,在大多数情况下)。事实上,以下代码在 Mountain Lion 上运行良好:

#include <notify.h>
#include <iostream>

#define kNotifySCNetworkChange "com.apple.system.config.network_change"

void init()
{

   int token;
   int status = notify_register_check(kNotifySCNetworkChange, &token);
   if (status != NOTIFY_STATUS_OK)
   {
       std::cout << "Event Registration failed" <<std::endl;
   }
   std::cout << "Event Registration Success" << std::endl;

}

int main()
{
 int rc = fork();
 init();


}
于 2012-11-11T00:58:29.717 回答