博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt之QProcess 和 c语言对比
阅读量:4038 次
发布时间:2019-05-24

本文共 1860 字,大约阅读时间需要 6 分钟。

命令行参数

大多控制台程序都接受命令行参数,一个例子:

#include 
int main(int argc, char **argv){ for (int i=1; i

编译,调用程序时可指定命令行,结果:

$ ./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 
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 
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()

获得返回值。

转载地址:http://lnpdi.baihongyu.com/

你可能感兴趣的文章
gdb debug tips
查看>>
arm linux 生成火焰图
查看>>
linux和windows内存布局验证
查看>>
linux config
查看>>
linux insmod error -1 required key invalid
查看>>
linux kconfig配置
查看>>
linux不同模块completion通信
查看>>
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux dump_backtrace
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>