Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ flatter与linux_C++_Linux_Flutter - Fatal编程技术网

C++ flatter与linux

C++ flatter与linux,c++,linux,flutter,C++,Linux,Flutter,我想为Linux创建一个颤振插件。我不太懂C++,但我想试试。 在C++中创建shell命令是个好主意吗? 例如,如果我需要蓝牙设备,我确实需要 自动pPipe=::popen(“蓝牙CTL扫描打开”,“r”) 读取流,得到扫描结果,这是C++的好实践吗? 例如蓝牙,但它可能是wifi、4G等…使用popen本身并没有什么问题,但它是一种非常重要的方法,如果你经常使用相对短暂的命令,那么你可能会比其他嵌入或链接代码以执行等效操作的应用程序给系统带来更多的负载。另外,使用popen可能会也可能不会

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

自动pPipe=::popen(“蓝牙CTL扫描打开”,“r”)

读取流,得到扫描结果,这是C++的好实践吗?


例如蓝牙,但它可能是wifi、4G等…

使用popen本身并没有什么问题,但它是一种非常重要的方法,如果你经常使用相对短暂的命令,那么你可能会比其他嵌入或链接代码以执行等效操作的应用程序给系统带来更多的负载。另外,使用
popen
可能会也可能不会使您的程序更易于维护,这取决于您使用的工具是否更改了它们的命令行选项、更改了它们的输出以及是否在您想要支持的发行版上保持可用等等。

popen
不是很重要。一般来说,在Linux上生成进程相对来说是轻量级的(并不比创建线程贵!)。而且创建管道和复制文件描述符比打开要省力
execve
可以增加实质性的负载,但这主要是由于编写糟糕的程序带来了大量垃圾。如果你执行一个小的(@ DeNeWORK:我已经做了类似的事情与康基呼叫NVIDIA设置和其他程序CPU速度,温度等-它是大量的资源密集型比它需要的-这是否重要与否取决于很多因素。考虑替代方案-链接一些图书馆蓝牙/ WiFi/任何支持(OP询问一般情况,而不仅仅是
bluetoothctl
),查找您可以使用的操作系统调用,查看
/proc
/dev
或类似内容:它们都比每次启动一个临时进程要高效得多。开销主要来源于启动正在执行的程序的复杂性;也就是说,解析所有动态库依赖项,加载所有废话和调用构造函数。成本高昂的不是
fork
execve
本身。在现代机器上,Linux可以一秒钟完成数千个fork而不费吹灰之力。是的,直接从
/proc
/sys
读取更高效,这取决于您试图实现的目标稳定。但它击败了*nix编写简单程序的方式。@datenwolf“开销主要源于……”的复杂性-那么?开销就是开销。我知道你对Linux进程的启动感到自豪,但这里或那里的指责与我所说的“相当重的方法”的总体真相无关UNIX组合业务应该在上下文中被理解——对于BASH脚本或更长的运行管道来说是很好的,但是在C++中,最好不要重复使用EGRIP、LS、Dead、CURL等,而不是在使用OS/库版本/替代品的时候经常使用它。-根据我的回答。IMHO这是一种非常好的方法,可以通过管道输出到egrep和类似程序。StackOverflow注释提供的空间太小,无法完整解释,但根据手头的任务、和的子工作进程以及内存访问模式,将工作拆分为单独的进程可以极大地提高性能(要了解原因,您必须了解TLB是如何管理的,页面错误影响整个过程,而不仅仅是它们发生在的线程)。