复制粘贴怎么可能?

Raj*_*del 7 operating-system copy-paste system copying file-copying

我想知道长时间使用计算机后,感觉复制粘贴是基本功能,但我知道它不是。所以问题是这到底是如何运作的?

我想到了如何实现这一点的所有想法,但每次我想出不同的文件格式(如 gif、jpg、txt、png、mp3、mp4、JSON、YML 等)时,我都会陷入困境,而且越往后越复杂它变得像快捷方式,链接,然后是目录。就像它如何在 chrome 中复制搜索结果中的图像,而有时由于限制您无法复制某些内容,您也无法选择某些内容,然后您无法复制它,而有时即使您无法在层次结构中选择儿童被复制,那么它是如何实现的。

但是,当有人问我复制粘贴通常如何工作时,我的回答是:复制某些内容时,会将复制的项目放入内存,并将其粘贴到某处时,操作系统会找出应复制到的位置并复制所有文件到二进制并复制它。

这可能不是真的,所以你能解释一下它是如何工作的。了解如何编写用于复制粘贴的代码也会很有帮助。

r3m*_*n0x 5

您需要意识到的第一件事是“复制和粘贴”以及“拖放”是 IPC(进程间通信)的一种形式,因为数据正在从一个应用程序传输到另一个应用程序。这种机制通常由负责管理图形用户界面的同一个子系统或服务提供。

该子系统为“源”和“目标”应用程序提供了一种机制,以协商应传输的数据格式,如果它们“同意”某些通用格式,则可以传输数据。

一个例子来说明这个概念:

  1. 用户在 Web 浏览器中选择文本并按 Ctrl+C。
  2. 浏览器告诉窗口系统它有一些可用于复制的数据。请注意,此步骤不会复制任何数据。
  3. 用户打开文本编辑器并按 Ctrl+V。
  4. 文本编辑器告诉窗口系统以纯文本格式提供剪贴板上的内容。
  5. 窗口系统告诉浏览器以纯文本格式提供其共享数据。
  6. 浏览器将其数据从HTML(或其他内容)转换纯文本,并通过窗口系统将其传输到文本编辑器。请注意,这种转换并不总是可行的(取决于格式和应用程序),因此您有时无法粘贴复制的数据。

技术细节

  • 在 Windows 上,此功能是通过Ken White 提到的剪贴板 API提供的。
  • 在 Linux(可能还有其他地方)上,剪贴板功能严格来说并不是操作系统的一部分,而是由窗口服务器/管理器(实际上只是一个服务进程)通过窗口系统协议(例如X 协议Wayland )提供的

  • “2 [...]请注意,此步骤不会复制任何数据。” 如果关闭源应用程序怎么办?也许也卸载它?那以后能不能别贴了? (2认同)