CSn*_*erd 13 unix io operating-system system-calls
最近我正在研究操作系统.我只想知道:
系统调用(如write())和标准库函数(如printf())之间有什么区别?
Jea*_*nès 55
系统调用是对函数的调用,该函数不是应用程序的一部分,而是在内核中.内核是一个软件层,为您提供一些基本功能来抽象硬件.粗略地说,内核可以将您的硬件变成软件.
write()
无论你写的是什么类型的设备,你总是最终用来在外设上写任何东西.write()
被设计为只写一个字节序列,这是全部,仅此而已.但是write()
被认为太基本了(你可能想要写十个基础的整数,或者用科学计数法写一个浮点数等),不同类型的编程环境会为你提供不同的库以方便你.
例如,C编程语言为您提供printf()
了允许您以多种不同格式写入数据的功能.因此,您可以理解printf()
为将数据转换为格式化的字节序列并将write()
这些字节写入输出的函数.但是C++给了你cout
; Java System.out.println
等.这些函数中的每一个都结束于对write()
(至少在POSIX系统上)的调用.
有一点需要知道(重要的)是这样的系统调用是昂贵的!这不是一个简单的函数调用,因为你需要调用你自己的代码之外的东西,系统必须确保你不要试图做令人讨厌的事情等等.所以它在更高的类似打印功能中是很常见的一些缓冲是内置的; 这样写入并不总是被调用,但是你的数据被保存在一些隐藏的结构中,只有在真正需要或必要时才会写入(缓冲区已满或你真的想看到打印结果).
这正是您管理资金时所发生的情况.如果很多人每人给你5块钱,你就不会把它们存入银行!然后你把它放在你的钱包上(这是印刷品)直到它已满或者你不想再保留它们了.然后你去银行赚大钱(这是写).而且你知道,给钱包5美元要比去银行和存款要快得多.银行是内核/操作系统.