小编rya*_*don的帖子

iOS 命名管道,在 ObjC 中工作,在 Swift 中不起作用,相同的代码

我一直在尝试在 iOS 中使用命名管道,但在 Swift 中似乎基本上相同的代码会失败,而在 ObjectiveC 中却可以工作。

在 Swift 中,用于写入的 FileHandle 返回 nil,或者如果我使用 FileHandle(forWritingAt: URL) API,它会抛出 Permission Denied。在 Objective C 中,数据通过管道成功发送并记录。

这两个中的路径完全相同。Objective C 示例中的数据也是“hello”.data(using: .utf8),尽管传递到了函数中。

迅速

  do {
    try FileManager.default.removeItem(at: url)
  } catch let error {
    print("error deleting", error)
  }

  mkfifo(url.path, 0777)
  DispatchQueue.main.async {
    let fileHandle = FileHandle(forWritingAtPath: url.path)
    fileHandle?.write("hello".data(using: .utf8)!)
  }

  let fileHandle = FileHandle(forReadingAtPath: url.path)
  if let data = fileHandle?.availableData {
    print(String(data: data, encoding: .utf8))
  }
Run Code Online (Sandbox Code Playgroud)

目标C

  remove(path.UTF8String);
  mkfifo(path.UTF8String, 0777);
  dispatch_async(dispatch_get_main_queue(), ^{
    NSFileHandle *fileHandle=[NSFileHandle fileHandleForWritingAtPath: path];
    [fileHandle writeData:data]; …
Run Code Online (Sandbox Code Playgroud)

system darwin named-pipes ios swift

1
推荐指数
1
解决办法
1330
查看次数

标签 统计

darwin ×1

ios ×1

named-pipes ×1

swift ×1

system ×1