如何scanf()的操作系统里面工作?(How does scanf() work inside t

2019-07-31 19:02发布

我一直在想如何scanf()的/ printf()函数实际上是在硬件和操作系统级别的作品。 哪里的数据流和到底是什么操作系统围绕这些时间做什么? 什么叫不OS上? 等等...

Answer 1:

scanf()函数和printf()是在libc中(C标准库)功能,以及它们调用read()和write()操作系统分别为系统调用,谈话的文件描述符标准输入和分别为标准输出(的fscanf和fprintf让你指定要读/写距离)文件流。

调用read()和write()方法(和所有的系统调用)导致“上下文切换”你的用户级应用到内核模式,这意味着它可以执行特权操作,如直接对话的硬件。 这取决于你如何启动应用程序时,“标准输入”和“标准输出”文件描述符可能绑定到一个控制台设备(比如tty0),或某种虚拟控制台设备(如通过一个xterm曝光)。 阅读()和write()安全地将数据从内核缓冲区拷贝到/称为“UIO”。

scanf函数和printf的格式字符串转换部分不会发生在内核模式下,只是在普通用户模式(内“的libc”),拇指与系统调用的一般规则是你切换到内核模式尽可能少,既避免上下文切换的性能开销,并为安全性(你必须非常小心,任何发生在内核模式!在内核模式下更少的代码意味着在操作系统少错误/安全漏洞)。

顺便说一句..这一切是从UNIX的角度写的,我不知道微软Windows是如何工作的。



Answer 2:

在我的操作系统,我用的scanf和printf的工作是基于函数的getch()蚂蚁putch()。



Answer 3:

我觉得OS只提供了两个流,一个用于输入,另一个用于输出,抽象流的输出数据被远呈现方式或在输入数据的来源。

还等什么scanf函数和printf的正在做的是只需从加入字节(或消费字节)流。



Answer 4:

scanf的,printf的等内部所有这些类型的功能不能被直接写在C / C ++语言。 在内部它们都通过使用keword“asm”中 ,用关键字“asm”中写任何东西的汇编语言编写,直接引入到不论编译(没有改变,即使编译后)的目标文件和汇编语言,我们已经得到了预定义代码可以实现所有这些功能......因此,在短期SCANF PRINTF等都是用汇编语言编写INTERNALLY。 你可以设计自己的输入功能使用关键字“ASM”。



文章来源: How does scanf() work inside the OS?