我正在阅读 Linux编程接口和 Linux编程实例。两者都是非常好的书籍并且非常好地解释Linux API。但我常常发现自己认为在现实世界的项目中,我更喜欢C ++标准库,Boost或其他一些优秀的C ++库(有许多编写良好且可移植的C ++库)。这自然就是一个问题 - 为什么我需要在目标平台上提供优秀的C ++编译器和库(Boost,TBB等)时直接使用Linux API?我想在Windows API上也可以这么说,但我对Windows系统编程知之甚少。
答案 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。通常使用起来更快,并且可以更轻松地将代码移植到另一个平台。但是:
答案 2 :(得分:0)
未针对特定平台发布C ++标准。它与平台无关,因此如果您要使用某些平台特性/功能,则必须使用通常称为system
api的平台相关特性/功能。所以从这个意义上讲,没有C ++库不会弃用linux / windows api。