QtのQprocessとc言語の対比
5526 ワード
コマンドラインパラメータ
ほとんどのコンソール・プログラムは、コマンド・ライン・パラメータを受け入れます.一例:
コンパイル、プログラムを呼び出すときにコマンドラインを指定します.結果:
Qprocessで外部プログラムを呼び出す場合、直接コマンドラインパラメータを指定することができる
ほとんどのコンソール・プログラムは、コマンド・ライン・パラメータを受け入れます.一例:
#include <stdio.h>
int main(int argc, char **argv)
{
for (int i=1; i<argc; ++i)
printf("%s
", argv[i]);
return 0;
}
コンパイル、プログラムを呼び出すときにコマンドラインを指定します.結果:
$ ./process a b "c d"
a
b
c 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!
");
fprintf(stderr, "Hello STDERR!
");
return 0;
}
コンパイル (2つのストリームを することに し、 エラーのファイル は2):$ ./process
Hello STDOUT!
Hello STDERR!
$ ./process > out.txt
Hello 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=2
output: 1+1=2
する がファイル にある は、リダイレクトも できます.$ ./process < intput.txt
output: 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.exe
C:\> echo %errorlevel%
Linuxの で、$ ./process
$ echo $?
り を します.
Qprocessの では、 int QProcess::execute() int QProcess::exitCode()
り を します.