3

iphone/objective-cでsigpipeをキャッチするにはどうすればよいですか?

ありがとう

4

5 に答える 5

4

SigPipeHandler をテストするための 1 つの重要な事実:

私にとっては、デバッガーがアタッチされているときは機能しませんでした。そのため、XCode から直接アプリを実行する場合、Handler は呼び出されません。一方、デバッガーが接続されていないデバイスでは、ハンドラーは期待どおりに動作します。

于 2011-10-04T11:52:57.840 に答える
3

古き良き POSIX コードを使用します。

#include <signal.h>

void SigPipeHandler(int s);

void SigPipeHandler(int s)
{
    // do your handling
}

ある場所(main.m?)で初期化

signal(SIGPIPE, SigPipeHandler);
于 2009-08-18T18:24:14.203 に答える
1

最初の答えはうまくいきます。ただし、すべてをファイルに入れる必要がありmain.mmます。

そしてstatic class(Singleton)、それも機能します。

#import <UIKit/UIKit.h>
#import <sys/signal.h>
#if TARGET_IPHONE_SIMULATOR
#endif

void SigPipeHandler(int s)
{
    NSLog(@"We Got a Pipe Single :%d____________",s);
}

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    signal(SIGPIPE, SigPipeHandler);
    int retVal = UIApplicationMain(argc, argv, nil, @"FullAppDelegate");
    [pool release];
    return retVal;
}
于 2011-09-16T22:31:17.517 に答える
1

最初の答えはうまくいきません。また、2番目の投稿を参照して説明されているソリューションを使用しようとしています:

int main(int argc, char *argv[ ]) {
   struct sigaction mySigAction;
   mySigAction.sa_handler = SIG_IGN;
   sigemptyset(&mySigAction.sa_mask);
   sigaction(SIGPIPE, &mySigAction, NULL);
   ...
}

しかし、このコードも機能しません。誰でもこの問題の解決策を知っていますか?

于 2010-02-27T15:02:41.373 に答える
1

ここに記載されているように SO_NOSIGPIPE を設定してみてください: SIGPIPE を防止する方法 (または適切に処理する方法)

于 2009-12-12T23:06:05.387 に答える