【发布时间】:2020-04-26 10:35:45
【问题描述】:
我想使用一些使用文件描述符的 C 代码。 背景是我想从 cgraph 库中读取一些数据。
public extension UnsafeMutablePointer where Pointee == Agraph_t {
func saveTo(fileName: String) {
let f = fopen(cString(fileName), cString("w"))
agwrite(self,f)
fsync(fileno(f))
fclose(f)
}
}
我想要文件输出,但不写入临时文件。因此,我想做这样的事情:
public extension UnsafeMutablePointer where Pointee == Agraph_t {
var asString: String {
let pipe = Pipe()
let fileDescriptor = UnsafeMutablePointer<Int32>.allocate(capacity: 1)
fileDescriptor.pointee = pipe.fileHandleForWriting.fileDescriptor
agwrite(self, fileDescriptor)
let data = pipe.fileHandleForReading.readDataToEndOfFile()
if let output = String(data: data, encoding: .utf8) {
return output
}
return ""
}
}
但它不起作用,导致 agwrite(,) 中出现 EXC_BAD_ACCESS。我需要做什么? 非常感谢!
【问题讨论】:
-
为什么是
UnsafeMutablePointer<Int32>?fopen返回File *。 -
Swift 导入的
agwrite的确切类型签名是什么?
标签: swift macos language-interoperability