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

标签 c++ c linux

我正在阅读Linux 编程接口(interface)Linux 编程示例。这两本书都是非常好的书,很好地解释了 Linux API。但我经常发现自己在想,在现实世界的项目中,我更喜欢 C++ 标准库、Boost 或其他一些好的 C++ 库(有许多编写良好且可移植的 C++ 库),而不是 C API。这自然会带来一个问题——当良好的 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 文件描述符。例如,选择。您还可以制作文件以外的东西,例如管道和套接字,并且可以将它们传递给其他进程。使用 POSIX 文件描述符有着悠久的传统,我们有大量关于如何使用它们进行网络编程的书籍和引用资料。

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

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

关于c++ - C++ 是否弃用了 Linux API 的某些部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7063091/

相关文章:

c - 我怎样才能在c中创建一个n维数组

linux - 新创建的 Docker 容器是否与新的 cgroup 相关联?

c++ - Floating/Embedded QDockWidget in a QWidget (KXmlGuiWindow's CentralWidget designed in QT Designer)

C++ 通过错误检查使 sscanf 代码适应 istringstream

c - 为什么这个C程序需要这样的表达式

c - 链接列表无法打印? C

linux - Kurento - WebRTC 不能在 linux 虚拟机 azure 服务器上运行

linux - 来自 C++ 程序的 ntpstat

python - c++ 中的循环类似于 python(基于范围的 for)

c++ - 流操纵器的模板类型推导