我试图忽略我在 Swift 应用程序中使用的第三方 SDK 抛出的 SIGPIPE 信号。如何让我的应用程序全局忽略 SIGPIPE 信号?
问问题
1930 次
1 回答
5
语法与 C 程序中的相同:
signal(SIGPIPE, SIG_IGN)
问题是SIG_IGN
Swift 中没有定义。对于 C 程序,它定义<sys/signal.h>
为
#define SIG_IGN (void (*)(int))1
但是这个整数到指针的转换并没有导入到 Swift 中,所以你必须自己定义它:
let SIG_IGN = CFunctionPointer<((Int32) -> Void)>(COpaquePointer(bitPattern: 1))
signal(SIGPIPE, SIG_IGN)
对于Swift 2 (Xcode 7),以下应该可以工作:
typealias SigHandler = @convention(c) (Int32) -> Void
let SIG_IGN = unsafeBitCast(COpaquePointer(bitPattern: 1), SigHandler.self)
signal(SIGPIPE, SIG_IGN)
从Swift 2.1 (Xcode 7.1) 开始, SIG_IGN
它被定义为公共属性,您可以简单地编写
signal(SIGPIPE, SIG_IGN)
于 2014-12-11T16:26:55.997 回答