Qt之QProcess 和 c语言对比
来源:互联网 发布:电信网络诈骗报警平台 编辑:程序博客网 时间:2024/04/29 13:16
命令行参数
大多控制台程序都接受命令行参数,一个例子:
#include <stdio.h>int main(int argc, char **argv){ for (int i=1; i<argc; ++i) printf("%s\n", argv[i]); return 0;}
编译,调用程序时可指定命令行,结果:
$ ./process a b "c d"abc d
用QProcess调用外部程序时,可直接指定命令行参数
QProcess process;//process.execute();//这个函数的 功能 是 调用 外部程序时 会阻塞,知道 外部程序结束
process.start("./process", QStringList()<<"a"<<"b");process.start("./process a b");
后一种写法看起来写起来比较简洁,但是程序路径或参数中包括空格时,就不如第一种方便了。
标准输出
对于控制台程序来说,这个可能是用的最多的了。比如上一个程序,我们遍历命令行参数,然后输到标准输出。
在控制台下,我们通常会使用重定向功能,比如:
$./process a b "c d" > out.txt
在QProcess下,我们使用
QProcess::readAllStandardOutput ()
获取标准输出
QProcess::setStandardOutputFile()
设置输出到的文件,相当于前面的重定向
QProcess process;process.start("./process", QStringList()<<"a"<<"b");process.readAllStandardOutput();
可以使用:
- QProcess::setStandardOutputProcess()
将标准输出作为另个进程的标准输入。形成 ls -l | more 这样的管道操作
由于QProcess是QIODevice的派生类,故:
- read()
- readLine()
- ...
都可以直接用获取被调用程序的标准输出。
标准出错
相对于标准输出,这个东西大家似乎用的比较少了。
#include <stdio.h>int main(int argc, char **argv){ fprintf(stdout, "Hello STDOUT!\n"); fprintf(stderr, "Hello STDERR!\n"); return 0;}
编译运行(注意区分两个流,标准出错的文件描述符是2):
$ ./processHello STDOUT!Hello STDERR!$ ./process > out.txtHello STDERR!$ ./process > out.txt 2>err.txt$
标准输入
这个也不用多说,使用scanf()/gfets()等函数:
#include <stdio.h>int main(int argc, char **argv){ char contents[1024]; fgets(contents, 1024, stdin); printf("output: %s", contents); return 0;}
运行:
$ ./process 1+1=2output: 1+1=2
如果要输入的内容在文件内,也可以使用重定向
$ ./process < intput.txtoutput: contents of input.txt
在QProcess中,直接使用QIODevice的write()函数
QProcess process;process.start("./process")process.write("intput");
也可以设置文件作为输入
- QProcess::setStandardInputFile()
返回值
似乎很多人分不清返回值和标准输出的概念。
int main(){return 0;}
也就是程序中 return X/exit(X) 等函数中指定的值了。
在Windows下,通过
C:\> process.exeC:\> echo %errorlevel%
在Linux下,通过
$ ./process$ echo $?
获得返回值。
在QProcess下,则通过:
- int QProcess::execute()
- int QProcess::exitCode()
获得返回值。
- Qt之QProcess 和 c语言对比
- Qt 之 QProcess
- Qt QProcess
- QT输入输出(四)之 QProcess
- Qt之进程间通信(QProcess)
- QT输入输出(四)之 QProcess
- Qt之进程间通信(QProcess)
- Qt之QProcess(一)运行cmd命令
- Qt之QProcess(二)调用外部程序
- C语言学习之sizeof和strlen对比
- C语言学习之sizeof和strlen对比
- 【Qt】Qt之进程间通信(QProcess)【转】
- go语言和C语言的对比
- QT开发之QProcess进程运行外部程序
- Qt中使用QProcess备份和恢复Mysql数据库
- Qt中使用QProcess备份和恢复Mysql数据库
- Qt QProcess应用
- Qt进程QProcess相关
- C# WinForm控件随窗体大小改变自动适应改变
- vc根据域名获取IP地址 gethostbyname()函数
- 现在有三个按钮,在FrameLayout下如何让这三个按钮以水平方向分别左对齐,居中对齐和右对齐?
- 使用输入文件流的eof()时要注意一个问题
- #define总结 (网上资料汇集)
- Qt之QProcess 和 c语言对比
- 计算机启动流程
- Activity横竖屏切换生命周期
- DECLARE_DYNAMIC 和 IMPLEMENT_DYNAMIC
- 保持两轨道的平行性
- Qt+VS编译器:默认库“library”与其他库的使用冲突;使用 /NODEFAULTLIB:library
- 原码、反码和补码
- 9-2 什么是零点漂移?产生零点漂移的主要原因是什么?差动放大电路为什么能抑制零点漂移?
- android:初级 [Android] Eclipse Android中设置模拟器屏幕大小几种方法