剪贴板数据存储在哪里?


11

当剪贴板中有东西时,是否有实际的文件存储数据?

Answers:


14

pbs粘贴板由OS X上的进程处理。被复制的内容存储在pbs地址空间内。有关更多信息,请参阅 Apple Pasteboard Server文章。

无论数据是在同一应用程序中的对象之间还是在两个不同应用程序中的对象之间传输,在Cocoa应用程序中,接口都是相同的-NSPasteboard对象访问共享存储库,作家和读者在此共享存储库以交换数据。编写器(称为粘贴板所有者)将数据存储在粘贴板实例上并继续前进。然后,读者会在将来的某个未指定的时间异步访问粘贴板。到那时,writer对象可能甚至不存在了。例如,用户可能已经关闭了源文档或退出了应用程序。

因此,当在两个不同的应用程序之间移动数据,从而在两个不同的地址空间之间移动时,会涉及到第三个存储空间,因此即使在没有源的情况下,数据也仍然存在。NSPasteboard提供对始终在后台运行的第三个地址空间(粘贴板服务器进程(pbs))的访问。粘贴板服务器维护任意数量的单个粘贴板,以区分多个并发数据传输。


5

正如Mateusz所指出的,没有文件包含此信息。但是,您可以使用pbcopypbpaste操纵粘贴板。

例如,ls | pbcopy将输出(stdout)复制ls到粘贴板。

pbcopy的手册页。


3

粘贴板服务器进程pboard 不是 pbs,您可以通过检查两个手册页来进行验证。

现在我们知道正确的过程,我们可以:

  1. 加载活动监视器
  2. 搜索pboard过程
  3. 使用cmd+ 获取信息i
  4. 查看打开的文件和端口

我们可以看到它唯一打开的文件是dyld和dyld缓存。

在此处输入图片说明


看来你是对的。我打开了Console.app,复制完某些内容后,我从该pboard过程中获取了日志。奇怪的是,Appe网站上的信息有误。+1
Mateusz Szlosek

1
@MateuszSzlosek是的,很奇怪。我已经报告过了,但是到目前为止还没有改变。
马特·塞弗顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.