operating-system - 复制粘贴怎么可能?

标签 operating-system system copy-paste file-copying copying

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

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

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

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

最佳答案

您需要意识到的第一件事是“复制和粘贴”以及“拖放”是 IPC(进程间通信)的一种形式,因为数据正在从一个应用程序传输到另一个应用程序。这种机制通常由负责管理图形用户界面的同一子系统或服务提供。
该子系统为“源”和“目标”应用程序提供了一种机制,以协商应传输的数据格式,如果它们“同意”某种通用格式,则可以传输数据。
一个例子来说明这个概念:

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

  • 技术细节
  • 在 Windows 上,此功能通过 Clipboard API 提供。正如肯怀特所说。
  • 在 Linux(可能还有其他任何地方)上,剪贴板功能严格来说并不是操作系统的一部分,而是由 Window Server/Manager(实际上只是一个服务进程)通过诸如 X protocol 之类的窗口系统协议(protocol)提供的。或 Wayland .
  • 关于operating-system - 复制粘贴怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52887507/

    相关文章:

    linux - 什么是对延迟敏感的应用程序?

    Java - 即使文件不可读,file.length() 也会返回

    c - 用户模式和内核模式下的线程

    c - 在我们的 C/C++ 程序中使用 espeak 需要哪些行?

    linux - 粘贴到终端/fish shell : [200~ and [201~ 时出现奇怪的字符

    Python SARIMA 模型自动使用 CPU 的所有核心。如何?

    c# - Random.Next 不起作用?

    c++ - 防止 clang tidy 报告关于 Boost 测试 header 的警告

    emacs 终端模式 : how to copy and paste efficiently

    delphi - 将文件复制到剪贴板然后将其粘贴到原始文件夹中不起作用