复制粘贴功能是如何实现的?
这个功能似乎非常强大,兼容各种类型的数据,它的实现机制是怎样的?
关注者
66被浏览
43,0593 个回答
// 这是一个很棒的问题诶,为什么没人来关注呢?干脆整理总结一下吧 XD
操作系统中会有一块地方,称作剪贴板(clipboard),专门用来处理复制粘贴。
不同系统的细节可能会不同,但大致上是这样的:
- 复制文本时,会把所复制的文本克隆一份到剪贴板里面。粘贴文本时,再将剪贴板里的文本克隆到所粘贴应用程序之中;
- 复制文本时会保留其样式(比如在 Office 软件中复制,也会存储字体、字号等等信息,复制到剪贴板的实质上是一种「标记语言」)。但粘贴时若应用程序(比如记事本)不支持这些样式,则会去掉样式;
- 复制图片、混合富文本时,也是同样先克隆到剪贴板里。
- 复制文件时,系统只会把文件的路径复制到剪贴板,等到粘贴时再分情况处理:
- 同一分区下,粘贴(或剪切)文件,都不会真正在存储设备里直接克隆、挪动,而是更改此文件的路径(path)属性。当然这与不同文件系统的具体实现有关;
- (这也就是为什么,「复制 → 删除复制源文件 → 粘贴」这个操作会在大部分系统中失效了)
- 不同分区下,粘贴(或剪切)文件,会重新开辟空间,然后克隆文件;
- 涉及到与其他设备(即插即用设备等)之间的复制粘贴则更加复杂,实现各有不同。
- 还要考虑的情况,就是涉及虚拟机、远程主机的复制粘贴机制。虚拟机软件、远程主机软件都会有一个「介于两系统之间的」剪贴板,「连接起」这两个系统的各自剪贴板,并做一些编码格式转换的工作。
- 关于虚拟机复制粘贴,更具体的细节可以看这里:Is it possible to copy paste between Mac OS and its virtual machine? 各软件实现有异。
参考: