gpt4 book ai didi

ios - 在 Swift iOS 中创建输入管道时应用程序崩溃(信号 13)

转载 作者:行者123 更新时间:2023-12-02 07:32:12 26 4
gpt4 key购买 nike

我的应用程序崩溃并出现错误 由于信号 13 终止.

我正在创建输入管道,并且在那条线上应用程序因上述原因崩溃。

 public func openConsolePipe() {

inputPipe = Pipe()

outputPipe = Pipe()
let pipeReadHandle = inputPipe.fileHandleForReading

dup2(STDOUT_FILENO, outputPipe.fileHandleForWriting.fileDescriptor)
dup2(STDERR_FILENO, outputPipe.fileHandleForWriting.fileDescriptor)

dup2(inputPipe.fileHandleForWriting.fileDescriptor, STDOUT_FILENO)
dup2(inputPipe.fileHandleForWriting.fileDescriptor, STDERR_FILENO)

NotificationCenter.default.addObserver(self, selector: #selector(self.handlePipeNotification), name: FileHandle.readCompletionNotification, object: pipeReadHandle)

pipeReadHandle.readInBackgroundAndNotify()
}

我正在关注 This Link为了实现这一点。

现在上面的教程在常规项目中工作正常。

但是我正在创建这个演示的框架并使用它另一个应用程序代码。

当时应用程序在 Line 上崩溃了。

dup2(inputPipe.fileHandleForWriting.fileDescriptor, STDERR_FILENO)



这是下面的方法,因为我从管道获取所有日志。
@objc func handlePipeNotification(notification: Notification)
{
inputPipe.fileHandleForReading.readInBackgroundAndNotify()

if let data = notification.userInfo![NSFileHandleNotificationDataItem] as? Data,
let str = String(data: data, encoding: String.Encoding.ascii) {

outputPipe.fileHandleForWriting.write(data)
}
}

最佳答案

经过过多的研发和测试,我发现了问题。

这里我的应用程序崩溃是因为当我在库中实现 pipe() 并导入该库时它崩溃了,因为 Pipe() 总是必须在主队列上运行。

所以在这里我只是像这样在主队列中创建 pipe() 和所有方法。

public func openConsolePipe() {
DispatchQueue.main.async {
inputPipe = Pipe()

outputPipe = Pipe()
let pipeReadHandle = inputPipe.fileHandleForReading

dup2(STDOUT_FILENO, outputPipe.fileHandleForWriting.fileDescriptor)
dup2(STDERR_FILENO, outputPipe.fileHandleForWriting.fileDescriptor)

dup2(inputPipe.fileHandleForWriting.fileDescriptor, STDOUT_FILENO)
dup2(inputPipe.fileHandleForWriting.fileDescriptor, STDERR_FILENO)

NotificationCenter.default.addObserver(self, selector: #selector(self.handlePipeNotification), name: FileHandle.readCompletionNotification, object: pipeReadHandle)

pipeReadHandle.readInBackgroundAndNotify()
}
}

这是带有主队列的管道处理程序方法。
@objc func handlePipeNotification(notification: Notification)
{
DispatchQueue.main.async {
inputPipe.fileHandleForReading.readInBackgroundAndNotify()

if let data = notification.userInfo![NSFileHandleNotificationDataItem] as? Data,
let str = String(data: data, encoding: String.Encoding.ascii) {

outputPipe.fileHandleForWriting.write(data)
}
}
}

关于ios - 在 Swift iOS 中创建输入管道时应用程序崩溃(信号 13),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60338037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com