使用C++开发与Linux系统相关的程序
Using C++ to develop a Linux system related program
当我做C++相关的Linux工作时,我在考虑这个问题。
我想问几个问题:
-
C++式动态分配是否支持 Linux 系统调用?
由于C++使用new/delete,因此在手册页中,linux系统调用使用C样式的动态分配。我们可以互换使用它们,还是将C++式动态变量传递给 C 式动态变量有限制?或者只是保持它们只要一致,就可以了?
我希望以良好的编码风格回答(例如易于维护,易于调试)
-
另外,这个问题更侧重于如何使用C++来开发Linux系统的相关工作?
我是否只是在需要时使用C,否则我只是使用C++进行我的主要工作?或者有更好的方法可以做到这一点?
-
在标题中,假设 glob.h,C++程序中,我们应该只是
#include <glob.h>
还是有其他方法?
我真的很想知道行业对这个问题的标准是什么。
1.C++式动态分配是否支持 Linux 系统调用?
由于C++使用new/delete,因此在手册页中,linux系统调用使用C样式的动态分配。我们可以互换使用它们,还是将C++式动态变量传递给 C 式动态变量有限制?或者只是保持它们只要一致,就可以了?
new
和delete
不能安全地与malloc
、realloc
和free
混合。 但是,C++本身可以使用malloc
,realloc
和free
,有时很好,但对于适当的"对象",它只能让你到此为止:许多现有的C++库代码硬编码使用new
和delete
,你需要自己处理"放置新"和破坏对象。 您可以探索定义自己的new
,并根据malloc
和free
delete
运算符 - 我从未见过这样做。 典型的 C 堆函数可能针对较大的平均分配大小进行了优化,而C++可能涉及大量小请求,因此可能存在性能和内存包效率方面的考虑。
我希望以良好的编码风格回答(例如易于维护,易于调试)
为了可维护性和一致性,C++程序倾向于最小化或消除对malloc
等人的使用。
2.In 另外,这个问题更侧重于如何使用C++来开发Linux系统的相关工作?
我是否只是在需要时使用C,否则我只是使用C++进行我的主要工作?或者有更好的方法可以做到这一点?
C++ 是 C 的近乎超集,具有一些非常好的功能,用于编写大型、可维护且高效的程序。 如果您知道如何使用它,恕我直言,您应该默认使用它。 当您需要更多的可移植性,或者想与您无法信任的其他人在一个团队中明智地使用C++时,请使用 C! (我认真地说。
3.In 一个标题,比如说 glob.h,在C++程序中,我们应该只 #include 还是有其他方法?
是的。。。但您可能希望在前一行用extern "C" {
和下一行的}
将其包围,以抑制C++符号名称重整。
# 1.是的
#2.
我是否只是在需要时使用c,否则我只使用c ++进行我的主要工作?
是的。
Linux 的绝大多数功能都是由 C 接口提供的。 boost
是一个很好的反例。 您不会在那里找到特定于Linux的功能,但是通用功能比glibc
提供的功能更自然
#3.是的,你可以这样做,或者你可以考虑boost::filesystem
(或类似)。
IIRC(自从我在 *nix 上写C++以来已经有大约 5 年了),C++可以像 C 程序一样编写和编译,使用相同的 C 语法等,具体取决于编译器。我相信 gnu 编译器支持这一点。C 程序员迁移到 C++ 是一种危险,因为他们编写的程序C++实际上是 C 程序,除了最后带有 cpp。:D
我的意思是,当你编写C++程序时,你可以调用系统函数,与你在C++中调用任何函数的方式几乎没有区别,因为它们只是函数调用。您是负责分配内存并清理它的人(或者更确切地说,您是通过C++内置的内存管理,如"新建"和"销毁"或您与项目关联的任何垃圾收集器。你调用Linux系统函数的事实真的无关紧要。只需像调用任何类似 C 的函数一样调用它们即可。
我会说用你学到的东西编写代码是很好的C++编码风格。我想你会比你想象的更少担心。
- C++,系统无法执行指定的程序
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 在不使用系统的情况下从C++应用程序格式化 Linux 中的 SD 卡
- 如何为模块化应用程序实现C++插件系统
- 用于系统程序的 TDD
- C++事件系统 - 多态事件和事件处理程序
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- 如果我删除指针,我的C++程序会意外删除系统文件吗?
- 如何设置Qt应用程序以使用类Unix系统的实际环境变量?
- 通知 Windows 系统应用程序字体已被卸载/删除
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- 程序使用boost::文件系统链接clang,但不使用gcc
- 即使在我为我的应用程序授予管理员后也无法从 Windows 系统复制目录
- IOCTL 驱动程序系统缓冲区始终为空
- 将 std::文件系统头文件添加到我的程序时出现编译错误
- 如何将控制台应用程序放入系统托盘通知C++?
- 用户土地访问内核土地驱动程序系统通知
- 为什么非unicode应用程序系统语言环境使Unicode字体具有错误显示的符号字符
- visual studio 2015-无法启动程序:系统找不到指定的文件.(C++BTW)