QtのQprocessとc言語の対比

5526 ワード

コマンドラインパラメータ
ほとんどのコンソール・プログラムは、コマンド・ライン・パラメータを受け入れます.一例:
#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()

  • り を します.