我正在阅读Linux编程接口和Linux编程的例子 。 这两本书都非常好,很好的解释了Linux API。 但是我经常发现自己认为,在现实世界的项目中,我更喜欢C ++标准库,Boost或其他一些优秀的C ++库(有许多写得很好的,可移植的C ++库),只要有可能的话。 这自然会提出一个问题 – 当目标平台上有良好的C ++编译器和库(Boost,TBB等)时,为什么我需要直接使用Linux API? 我猜也可以说Windows API,但我不太了解Windows系统编程。
这对C ++来说并不陌生。 在C中,有很长的两种打开文件的方法:
// Only on POSIX int fdes = open("file.txt", O_RDONLY);
要么:
// Any hosted C environment, POSIX or otherwise FILE *fp = fopen("file.txt", "rb");
那么为什么有人会使用POSIX特定的版本呢? 答案很简单 – 有大量的系统调用与POSIX文件描述符一起工作。 例如, select
。 你也可以做非文件的东西,比如管道和套接字,你可以把它们传递给其他进程。 使用POSIX文件描述符有着悠久的传统,我们有大量关于如何使用它们进行网络编程的书籍和参考资料。
所以在便携版本和强大版本之间进行权衡。 它一直是。
另外一半是在Linux上使用POSIX界面的文件。 图书馆只是把你藏起来。 Boost使用它,C运行时使用它,JRE使用它,而GHC使用它。 许多(大多数?)语言运行时用C编写,并且首选直接访问系统调用。
您应该尽可能使用更高级别的API。 使用它通常会更快,并且更容易将代码移植到另一个平台。 然而:
C ++标准不是针对特定平台发布的。 它是平台独立的,所以如果你打算使用一些平台特性/功能,你将不得不使用平台相关的特性/功能,通常称为system
API。 所以在这个意义上,没有C + +库不会弃用Linux / Windows API。