加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:15:03 所属栏目:安全 来源:网络整理
导读:最近我正在研究操作系统.我只想知道: 系统调用(如write())和标准库函数(如printf())之间有什么区别? 系统调用是对函数的调用,该函数不是应用程序的一部分,而是在内核中.内核是一个软件层,为您提供一些基本功能来抽象硬件.粗略地说,内核可以将您的硬件变成
最近我正在研究操作系统.我只想知道:

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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读