3

次のコードで、MAC OS X 10.7 (ライオン) に 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 が返されるシナリオを誰か教えてもらえますか?


最近気付いたもう 1 つのこと:アプリケーションでfork()システム コールを使用しています。親プロセスに登録しようとしたら、イベント登録に成功しました。ただし、子プロセスでイベント登録に失敗しました。なぜ子プロセスで失敗したのですか??? 何か案が!!!

4

1 に答える 1

0

通知 API はシステム コールではなく、Mach API コールであるため、errno は 0 です。詳細については、mach_error () を使用してください。fork は問題にならないはずです (ほとんどの場合、mach ポートのクローンも作成されます)。実際、次のコードは 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 に答える