QT代码中运行Linux命令
#include <QProcess>
//QProcess::execute("echo 210 >/sys/class/backlight/pwm-backlight.0/brightness");
~~~
root@atlas7-arm:~# tty
/dev/ttySiRF1
root@atlas7-arm:~# echo "asdf" > /dev/console
asdf
root@atlas7-arm:~# echo "asdf" > /dev/ttySiRF1
asdf
~~~
原理:
首先确定终端从哪里输出的。
命令:tty
root@atlas7-arm:~# tty /dev/ttySiRF1
echo "asdf" > /dev/console (这个Linux的,window是 CON)
echo "asdf" > /dev/ttySiRF1 也是可以的。
所以代码里面用/dev/console 。
因为文件指针使用的是标准流文件,因此我们可以不定义文件指针。
然后使用freopen()函数以写入方式w(write)打开输出文件slyar.out {freopen("slyar.out", "w", stdout);}
接下来的事情就是使用freopen()函数的优点了,我们不再需要修改scanf和printf,而是维持代码的原样就可以了。
因为freopen()函数重定向了标准流,使其指向前面指定的文件。
最后只要使用fclose关闭输入文件和输出文件即可。
fclose(stdin);
fclose(stdout);
详细如下:
所以我写了个宏:
#define START_SAVE_LOG(savedFilePath)\ freopen ( "/dev/console" , "r" ,
stdin);\
freopen (savedFilePath, "w" , stdout);
#define STOP_SAVE_LOG\ fclose (stdin);\
fclose (stdout);
|
因为目前INFO宏是在Loger.h里面,所以这个宏也加在里面。
具体使用方法:
START_SAVE_LOG("/home/root/AA.log")
STOP_SAVE_LOG
//实际应用 LogControl::getInstance()->addLog(string(to_string(i)+string(p)));
|
#define INFO(module,format, ...) \ do { \
if (LogLevel >= INFO_LEVEL) \
{ \
printf ( "\e[33m" ); \
printf (module); \
printf (format, ##__VA_ARGS__); \
printf ( "\e[0m" ); \
printf ( "\n" ); \
fflush (stdout); \
} \
} while (0)
|
==========================================================================
查看硬件信息:
查看/proc/cpuinfo,可以知道每个cpu信息,如每个CPU的型号,主频等。
#cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 42 model name : Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz