unix – write()和printf()之间的区别

前端之家收集整理的这篇文章主要介绍了unix – write()和printf()之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近我正在研究操作系统.我只想知道:

系统调用(如write())和标准库函数(如printf())之间有什么区别?

系统调用是对函数调用,该函数不是应用程序的一部分,而是在内核中.内核是一个软件层,为您提供一些基本功能来抽象硬件.粗略地说,内核可以将您的硬件变成软件.

你总是最终使用write()在外设上写任何东西,无论你写的是什么类型的设备. write()旨在只写一个字节序列,这就是全部,仅此而已.但是因为write()被认为是太基础的(你可能想要用十进制写一个整数,或用科学计数法写一个浮点数等),不同类型的编程环境会为你提供不同的库以方便你.

例如,C编程语言为您提供printf(),允许您以多种不同的格式写入数据.因此,您可以将printf()理解为将数据转换为格式化字节序列的函数,并调用write()将这些字节写入输出.但C给你cout; Java System.out.println等.这些函数中的每一个都以对write()的调用结束.

有一点需要知道(重要的)是这样的系统调用是昂贵的!它不是一个简单的函数调用,因为你需要调用你自己的代码之外的东西,系统必须确保你不要试图做坏事等等.所以它在更高的类似打印功能中是很常见的一些缓冲是内置的;这样写入并不总是被调用,但是你的数据被保存在一些隐藏的结构中,并且仅在真正需要或必要时才写入(缓冲区已满或你真的想看到打印结果).

这正是您管理资金时会发生的事情.如果很多人每人给你5块钱,你就不会把它们存入银行!然后你把它放在你的钱包上(这是打印件)直到它已满或者你不想再保留它们了.然后你去银行赚大钱(这是写).而且你知道给你的钱包加5美元比去银行和存款要快得多.银行是内核/操作系统.

猜你在找的Bash相关文章