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