jet*_*tru 8 c operating-system scanf internals
我一直在想如何scanf()/ printf()实际上在硬件和操作系统级别上工作.数据流在哪里以及操作系统在这些时间的确切行动是什么?操作系统会调用什么?等等...
Dav*_*dge 24
scanf()和printf()是libc(C标准库)中的函数,它们分别调用read()和write()操作系统系统调用,分别与文件描述符stdin和stdout对话(fscanf和fprintf允许你指定要读取/写入的文件流.
调用read()和write()(以及所有系统调用)会导致用户级应用程序的"上下文切换"进入内核模式,这意味着它可以执行特权操作,例如直接与硬件通信.根据您启动应用程序的方式,'stdin'和'stdout'文件描述符可能绑定到控制台设备(例如tty0)或某种虚拟控制台设备(如xterm暴露的设备).read()和write()安全地将数据复制到称为'uio'的内核缓冲区中.
scanf和printf的格式字符串转换部分不是在内核模式下发生的,而只是在普通用户模式下(在'libc'内),使用系统调用的一般经验法则是你尽可能不频繁地切换到内核模式避免上下文切换的性能开销,以及安全性(您需要非常小心内核模式中发生的任何事情!内核模式中较少的代码意味着操作系统中的错误/安全漏洞更少).
顺便说一句..所有这些都是从unix的角度编写的,我不知道MS Windows是如何工作的.
| 归档时间: |
|
| 查看次数: |
7252 次 |
| 最近记录: |