C ++是否弃用了Linux API的某些部分?

时间:2011-08-15 08:46:45

标签: c++ c linux

我正在阅读 Linux编程接口 Linux编程实例。两者都是非常好的书籍并且非常好地解释Linux API。但我常常发现自己认为在现实世界的项目中,我更喜欢C ++标准库,Boost或其他一些优秀的C ++库(有许多编写良好且可移植的C ++库)。这自然就是一个问题 - 为什么我需要在目标平台上提供优秀的C ++编译器和库(Boost,TBB等)时直接使用Linux API?我想在Windows API上也可以这么说,但我对Windows系统编程知之甚少。

3 个答案:

答案 0 :(得分:5)

这对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文件描述符有着悠久的传统,我们有大量有关如何使用它们进行网络编程的书籍和参考资料。

所以在便携版和强大版之间进行权衡。它一直都是。

的另一半是您在使用POSIX接口的Linux上处理文件的时间。图书馆只是将它隐藏起来。 Boost使用它,C运行时使用它,JRE使用它,GHC使用它。许多(大多数?)语言运行时是用C语言编写的,并且首选直接访问系统调用。

答案 1 :(得分:3)

您应该尽可能使用更高级别的API。通常使用起来更快,并且可以更轻松地将代码移植到另一个平台。但是:

  1. 由于law of leaky abstractions了解底层操作系统API非常有用,因此您可以了解更高级API无法隐藏的各种怪癖和性能问题。
  2. 对于便携式API,有些事情是不可行的,通常是因为操作系统之间的差异很大,所以不容易实现。
  3. 所有便携式API都会产生一些开销。在一个大项目中,它与其他代码相比很小,但是如果你做的很小,你可能想避免这种开销,特别是如果你知道你还需要在某个地方使用特定的API。

答案 2 :(得分:0)

未针对特定平台发布C ++标准。它与平台无关,因此如果您要使用某些平台特性/功能,则必须使用通常称为system api的平台相关特性/功能。所以从这个意义上讲,没有C ++库不会弃用linux / windows api。