NSTemporaryDirectory文件受到其他进程

时间:2016-05-30 01:47:27

标签: macos filesystems

我想在另一个进程中打开一些数据(保存在NSData中)。所以我做了这样的事情(在swift中):

let tempURL = NSURL.fileURLWithPathComponents([NSTemporaryDirectory(), NSUUID().UUIDString + ext])
data.writeToURL(tempURL, options: NSDataWritingOptions.DataWritingAtomic)
NSWorkspace.sharedWorkspace().openURL(tempURL)

如果数据是图像,则ext可能是'jpg'。

我可以看到创建的文件。预览可以很好地打开图像。问题是预览无法保存对文件的更改。根据 ls -l <​​/ strong>和获取信息,该文件肯定是我可写的。在写入之后和预览开始之前立即检查文件上的 lsof ,它不会被任何其他进程保持打开状态。

手动在该文件上运行预览也会导致“无法保存更改”。

临时文件夹(由NSTemporaryDirectory()返回)是:

/var/folders/zt/<random string of alphanum>/T

由于我能够编写文件,因此我不得不猜测临时文件的新OSX安全增强功能意味着只有创建者进程才能写入这些文件。如果我将文件移到我的桌面,我可以打开它,如果我使用硬编码的“/ tmp”作为临时文件夹,一切正常。

根据 man 7 tier ,/ var / folders是:

  

每用户临时文件和缓存

我无法找到提及临时文件夹中的跨进程安全性。 任何人都知道发生了什么事?

干杯。 保罗

0 个答案:

没有答案