许多Unix系统调用使用重载和默认变量。这个概念在C语言中不存在,所以Unix也是用C++编写的,对吗?
Bjarne Stroustrup大约在1983年创建了C++,此前他曾参与开发了 "C++的历史"中提到的"C with Classes"。根据Bjarne Stroustrup的FAQ,最早的"C with Classes"可以追溯到1979年。
希望这能澄清一个不可能的想法,即Unix是基于C++构建的。请注意,自1960年代Simula 67以来,面向对象编程语言就已经存在了,因此不要将对象和类与C++混淆。
所有主流的Unix版本在内核方面完全采用了纯C。(嗯,Mac OS X 在一个接口中有一点 C++。)
如果不计算桌面层,那么除了极少数例外,核心库和实用程序也是用C编写的。我能想到唯一使用C ++编写的核心实用程序是groff
。
但是,在软件包方面,情况就不同了...
我不知道你指的是哪些系统调用,但我敢打赌大多数类Unix操作系统都是用纯C编写的。可能只有对于系统调用使用了C++包装。
绝对是C语言 - 尝试使用man syscall
或man -s2 read
命令 - 这将为您提供C库接口,没有C++的影子。
UNIX系统通常使用纯C编写,出于某种原因,大多数UNIX开发人员似乎也不喜欢C++。
ioctl()
就是其中之一 - 它还有一个额外的优点,就是没有标准化。你可以认为“2个参数 vs 3个参数的open()
”是一种重载/默认参数机制。其他一些更深奥的系统调用也略微类似于这些。但是,“很多”让我感到有些夸张。 - Jonathan Lefflerptrace()
是另一个奇怪的函数,但越少谈论它越好... - cafioctl()
和open()
使用可变参数而非函数重载。 - bk1e