颤振和Linux

Posted

技术标签:

【中文标题】颤振和Linux【英文标题】:Flutter and linux 【发布时间】:2020-11-16 15:14:01 【问题描述】:

我想为 Linux 创建一个颤振插件。我不太了解 C++,但我想尝试一下。 在 C++ 中创建 shell 命令是个好主意吗? 例如,如果我需要蓝牙设备并且我确实需要

auto pPipe = ::popen("bluetoothctl scan on", "r");

并读取输出流以获取扫描结果,这是 C++ 中的一个好习惯吗? 例如蓝牙,但它会是 wifi、4G 等......

【问题讨论】:

【参考方案1】:

使用popen 本身并没有什么问题,但它是一种相当重量级的方法,如果您经常为相对临时的命令执行此操作,您可能会比另一个嵌入或链接代码的应用程序给系统带来更多负载做一些等效的事情。另外,使用popen 可能会或可能不会使您的程序更容易维护 - 取决于您使用的工具是否更改其命令行选项、更改其输出以及在您想要支持的发行版上保持可用等。

【讨论】:

popen 不是很重量级。一般来说,Linux 上的生成进程相对较轻(它并不比创建线程更昂贵!)。并且创建管道和复制文件描述符比打开要少。 execve 可以增加大量负载,但这主要是由于编写不佳的程序导致了大量的废话。如果你执行一个小的( @datenwolf:我用 conky 调用 nvidia-settings 和其他针对 CPU 速度、温度等的程序做了类似的事情 - 它大量比它需要更多的资源密集型be - 这对您是否重要取决于许多因素。考虑替代方案 - 链接一些库以支持蓝牙/Wifi/任何支持(OP 询问一般情况,不仅仅是bluetoothctl),找到您可以使用的操作系统调用,查看/proc/dev 或类似的:他们'都比每次都启动一个瞬态过程更有效率。 开销主要来自于启动程序的复杂性execveed;也就是说,解决所有动态库依赖项,加载所有废话,并调用构造函数。不是forkexecve 本身有很多成本。在现代机器上,Linux 可以毫不费力地每秒执行数千次分叉。是的,直接从/proc/sys 读取性能更高,并且取决于您要实现的目标也更稳定。但它打败了 *nix 编写简单程序的方式。 @datenwolf “开销主要来自...的复杂性” - 所以呢?开销是开销。我知道你为 Linux 进程启动感到自豪,但是在这里或那里分摊责任与我所说的“相当重量级的方法”的整体事实无关。并且应该在上下文中理解 UNIX 组合业务 - 对于 bash 脚本或运行时间较长的管道来说很好,但在 C++ 中重复管道输出到例如egrep、ls、date、curl 等,而不是在您“经常这样做”时使用操作系统/库版本/替代品 - 根据我的回答。 恕我直言,这是一个完美的方法来输出到 egrep 和类似的。 *** 注释提供的空间太少,无法完整解释它,但根据手头的任务、and 的子工作进程和内存访问模式,将工作拆分为单独的进程可能非常提高性能(要了解原因,您必须了解 TLB 的管理方式以及页面错误会影响整个过程,而不仅仅是它们发生的线程)。

以上是关于颤振和Linux的主要内容,如果未能解决你的问题,请参考以下文章

Linuxlinux压缩和解压缩命令大全

Linuxlinux环境基础开发工具使用

Linuxlinux环境基础开发工具使用

Linuxlinux环境基础开发工具使用

Linuxlinux环境基础开发工具使用

自学LinuxLinux用户组权限