在不涉及功能的情况下打印到标准输出
Printing to stdout without the involvement of functions
如何在不调用任何函数的情况下在屏幕上打印一些任意文本?
问这个问题的另一种方式是 i/o 函数是如何实现的?
我尝试在 google 中搜索,但不幸的是,没有找到任何结果,就好像它是某种绝密的东西一样。
学习用。
如果不了解这一点,我个人觉得自己离真正的程序员还差得远。
好吧,最后,粗略地说,计算机中的低级软件设置了一个特殊的内存位置或使用了一个特殊的指令来改变 CPU 上某些引脚上的电压,然后硬件响应这些变化。
但是用户级进程无权访问这些指令或内存位置。弄乱驱动硬件的东西是在内核中执行的 "device drivers" 的责任。他们使用这些特殊的内存位置或指令,并且每个人都负责特定的硬件设备。
如评论中所述,用户级进程通过系统调用与设备驱动程序通信。系统调用与普通函数调用不太一样——您不只是调用代码。在为它想做的事情设置一个 "request" 之后,用户级进程通常通过使用软件中断指令来戳内核。内核醒来,查看您的请求,然后自行决定要执行的代码。内核代码运行在更高的特权级别,将直接调用访问硬件的设备驱动程序。
这就是内核使进程彼此安全的方式。
真正从标准输出到屏幕是一个漫长的过程:
标准库最终进行系统调用,写入附加到 stdout 的 "pipe"。这是它离开您的流程的地方。
控制台正在读取管道的另一端。控制台是一个用户级进程,所以它必须做一个系统调用来读取。
控制台决定显示什么,以及如何让您看到它。会有更多的层,但最终会有对控制图形硬件的驱动程序的系统调用。他们会弄乱在屏幕上变成像素的位,使您的文本可见。
如何在不调用任何函数的情况下在屏幕上打印一些任意文本?
问这个问题的另一种方式是 i/o 函数是如何实现的?
我尝试在 google 中搜索,但不幸的是,没有找到任何结果,就好像它是某种绝密的东西一样。
学习用。 如果不了解这一点,我个人觉得自己离真正的程序员还差得远。
好吧,最后,粗略地说,计算机中的低级软件设置了一个特殊的内存位置或使用了一个特殊的指令来改变 CPU 上某些引脚上的电压,然后硬件响应这些变化。
但是用户级进程无权访问这些指令或内存位置。弄乱驱动硬件的东西是在内核中执行的 "device drivers" 的责任。他们使用这些特殊的内存位置或指令,并且每个人都负责特定的硬件设备。
如评论中所述,用户级进程通过系统调用与设备驱动程序通信。系统调用与普通函数调用不太一样——您不只是调用代码。在为它想做的事情设置一个 "request" 之后,用户级进程通常通过使用软件中断指令来戳内核。内核醒来,查看您的请求,然后自行决定要执行的代码。内核代码运行在更高的特权级别,将直接调用访问硬件的设备驱动程序。
这就是内核使进程彼此安全的方式。
真正从标准输出到屏幕是一个漫长的过程:
标准库最终进行系统调用,写入附加到 stdout 的 "pipe"。这是它离开您的流程的地方。
控制台正在读取管道的另一端。控制台是一个用户级进程,所以它必须做一个系统调用来读取。
控制台决定显示什么,以及如何让您看到它。会有更多的层,但最终会有对控制图形硬件的驱动程序的系统调用。他们会弄乱在屏幕上变成像素的位,使您的文本可见。