复制粘贴功能是如何实现的?

这个功能似乎非常强大,兼容各种类型的数据,它的实现机制是怎样的?
关注者
66
被浏览
43,059

3 个回答

// 这是一个很棒的问题诶,为什么没人来关注呢?干脆整理总结一下吧 XD


操作系统中会有一块地方,称作剪贴板(clipboard),专门用来处理复制粘贴。

不同系统的细节可能会不同,但大致上是这样的:

  • 复制文本时,会把所复制的文本克隆一份到剪贴板里面。粘贴文本时,再将剪贴板里的文本克隆到所粘贴应用程序之中;
    • 复制文本时会保留其样式(比如在 Office 软件中复制,也会存储字体、字号等等信息,复制到剪贴板的实质上是一种「标记语言」)。但粘贴时若应用程序(比如记事本)不支持这些样式,则会去掉样式;
    • 复制图片、混合富文本时,也是同样先克隆到剪贴板里。
  • 复制文件时,系统只会把文件的路径复制到剪贴板,等到粘贴时再分情况处理
    • 同一分区下,粘贴(或剪切)文件,都不会真正在存储设备里直接克隆、挪动,而是更改此文件的路径(path)属性。当然这与不同文件系统的具体实现有关;
      • (这也就是为什么,「复制 → 删除复制源文件 → 粘贴」这个操作会在大部分系统中失效了)
    • 不同分区下,粘贴(或剪切)文件,会重新开辟空间,然后克隆文件;
    • 涉及到与其他设备(即插即用设备等)之间的复制粘贴则更加复杂,实现各有不同。
  • 还要考虑的情况,就是涉及虚拟机、远程主机的复制粘贴机制。虚拟机软件、远程主机软件都会有一个「介于两系统之间的」剪贴板,「连接起」这两个系统的各自剪贴板,并做一些编码格式转换的工作。

参考:

  1. pc.net/helpcenter/answe
  2. superuser.com/questions
为什么?