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

pic*_*c11 2 c c++ linux

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

Die*_*Epp 5

这对C++来说并不陌生.在C中,有两种方法可以长时间打开文件:

// Only on POSIX
int fdes = open("file.txt", O_RDONLY);
Run Code Online (Sandbox Code Playgroud)

要么:

// Any hosted C environment, POSIX or otherwise
FILE *fp = fopen("file.txt", "rb");
Run Code Online (Sandbox Code Playgroud)

那么为什么有人会使用特定于POSIX的版本呢?答案很简单 - 有大量的系统调用可以使用POSIX文件描述符.例如,select.您还可以创建除文件之外的其他内容,例如管道和套接字,并且可以将它们传递给其他进程.使用POSIX文件描述符有着悠久的传统,我们有大量有关如何使用它们进行网络编程的书籍和参考资料.

因此,在便携版和强大版之间进行权衡.它一直都是.

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