1 | #include <QFile>
|
---|
2 | #include <QDebug>
|
---|
3 | #include <QProcess>
|
---|
4 |
|
---|
5 | int main (int argc, char *argv[])
|
---|
6 | {
|
---|
7 | if (argc < 4)
|
---|
8 | {
|
---|
9 | qDebug("Usage: %s <in_file> <out_file> <child> [<child_arguments>]\n\n"
|
---|
10 | "Sends <in_file> to stdin of <child> and puts its stdout to"
|
---|
11 | "<out_file>.", argv [0]);
|
---|
12 | return 0;
|
---|
13 | }
|
---|
14 |
|
---|
15 | QByteArray data;
|
---|
16 |
|
---|
17 | QFile qfIn (argv [1]);
|
---|
18 | if (qfIn.open (QIODevice::ReadOnly))
|
---|
19 | {
|
---|
20 | data = qfIn.readAll();
|
---|
21 | qfIn.close();
|
---|
22 | qDebug() << "Read" << data.size() << "bytes from" << argv [1];
|
---|
23 | }
|
---|
24 | else
|
---|
25 | {
|
---|
26 | qDebug() << "Couldn't open" << argv [1] << "for reading";
|
---|
27 | return 1;
|
---|
28 | }
|
---|
29 |
|
---|
30 | qint64 bytes;
|
---|
31 | QProcess proc;
|
---|
32 |
|
---|
33 | #if 0
|
---|
34 | proc.setProcessChannelMode (QProcess::ForwardedChannels);
|
---|
35 | #endif
|
---|
36 |
|
---|
37 | QStringList args;
|
---|
38 | for (int i = 4; i < argc; ++ i)
|
---|
39 | args << argv [i];
|
---|
40 |
|
---|
41 | proc.start (argv [3], args, QIODevice::ReadWrite);
|
---|
42 |
|
---|
43 | if (!proc.waitForStarted())
|
---|
44 | {
|
---|
45 | qDebug() << "Failed to start" << argv [3] <<":" << proc.errorString();
|
---|
46 | return 1;
|
---|
47 | }
|
---|
48 |
|
---|
49 | qDebug() << "Started" << argv [3];
|
---|
50 |
|
---|
51 | bytes = proc.write (data);
|
---|
52 | qDebug() << "Wrote" << bytes << "bytes to child process";
|
---|
53 |
|
---|
54 | proc.closeWriteChannel();
|
---|
55 | qDebug() << "Waiting for child termination...";
|
---|
56 |
|
---|
57 | if (!proc.waitForFinished())
|
---|
58 | {
|
---|
59 | qDebug() << "Child ended abnormally:" << proc.errorString();
|
---|
60 | }
|
---|
61 | else
|
---|
62 | {
|
---|
63 | qDebug() << "Child ended normally";
|
---|
64 | }
|
---|
65 |
|
---|
66 | data = proc.readAllStandardOutput();
|
---|
67 | qDebug() << "Read" << data.size() << "bytes from child process";
|
---|
68 |
|
---|
69 | QFile qfOut (argv [2]);
|
---|
70 | if (qfOut.open (QIODevice::WriteOnly))
|
---|
71 | {
|
---|
72 | bytes = qfOut.write(data);
|
---|
73 | qfOut.close();
|
---|
74 | qDebug() << "Wrote" << bytes << "bytes to" << argv [2];
|
---|
75 | }
|
---|
76 | else
|
---|
77 | {
|
---|
78 | qDebug() << "Couldn't open" << argv [2] << "for writing";
|
---|
79 | return 1;
|
---|
80 | }
|
---|
81 |
|
---|
82 | qDebug() << "Done.";
|
---|
83 |
|
---|
84 | return 0;
|
---|
85 | }
|
---|