unix – write()和printf()之间的区别
最近我正在研究操作系统.我只想知道:
系统调用(如write())和标准库函数(如printf())之间有什么区别?
系统调用是对函数的调用,该函数不是应用程序的一部分,而是在内核中.内核是一个软件层,为您提供一些基本功能来抽象硬件.粗略地说,内核可以将您的硬件变成软件.
你总是最终使用write()在外设上写任何东西,无论你写的是什么类型的设备. write()旨在只写一个字节序列,这就是全部,仅此而已.但是因为write()被认为是太基础的(你可能想要用十进制写一个整数,或用科学计数法写一个浮点数等),不同类型的编程环境会为你提供不同的库以方便你. 例如,C编程语言为您提供printf(),允许您以多种不同的格式写入数据.因此,您可以将printf()理解为将数据转换为格式化字节序列的函数,并调用write()将这些字节写入输出.但C给你cout; Java System.out.println等.这些函数中的每一个都以对write()的调用结束. 有一点需要知道(重要的)是这样的系统调用是昂贵的!它不是一个简单的函数调用,因为你需要调用你自己的代码之外的东西,系统必须确保你不要试图做坏事等等.所以它在更高的类似打印功能中是很常见的一些缓冲是内置的;这样写入并不总是被调用,但是你的数据被保存在一些隐藏的结构中,并且仅在真正需要或必要时才写入(缓冲区已满或你真的想看到打印结果). 这正是您管理资金时会发生的事情.如果很多人每人给你5块钱,你就不会把它们存入银行!然后你把它放在你的钱包上(这是打印件)直到它已满或者你不想再保留它们了.然后你去银行赚大钱(这是写).而且你知道给你的钱包加5美元比去银行和存款要快得多.银行是内核/操作系统. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 前端框架Bootstrap的Modal使用Ajax数据源,如何避免数据被缓
- 如何在AngularJS中保留ng-repeat的滚动位置?
- scala – 为什么BitSet需要将显式转换视为Set [Int]的实例?
- bash – 以冒号为分隔符的Globbing / pathname展开
- bootstrap-表单控件――按钮
- 玩转Bootstrap(基础) (2.表单操作)
- shell – 如何ssh到vagrant没有实际运行“vagrant ssh”?
- 使用Anorm在Postgres中保存/加载图像(Scala / PlayFramewor
- scala – Spark抛出java.util.NoSuchElementException:找不
- CA和证书(企业内网搭建CA服务器生成自签名证书,CA签署,实