- ベストアンサー
CreateProcess
さっそくですが… <MS-DOS上で動作するEXE> test.exeを実行する ↓ データ(文字列)を入力し,Enterを押すと 実行結果が表示されます。 ------------------------------------------- このようなtest.exeがある時, 1)test.txtにデータ(文字列)を入れておきます。 2)実行後,結果を入れるr.txtを作っておきます。 そこで,DOS上で↓このように動かしました。 C:\ ~ \ ~ >test.exe <test.txt >r.txt 以上のことを(環境:BorlandC++Builder6,Windows2000) API関数のCreateProcessを使って動かすことは 可能なのでしょうか??というのは, 現在,CreateProcessでtest.exeを 呼び出すことはできたのですが, どうしても" <test.txt >r.txt "という部分を 入れると引数が渡らないのです。 CreateProcessのpszApplicationNameやpszCommandLine 引数あたりでいろいろ試したのですが,できません。 もしCreateProcessで可能ならば どのようにすればよいのでしょうか?? あまり知識がなく,説明不足かもしれませんが どなたか分かる方がいらっしゃいましたら, 教えて下さい。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Borlandの処理系は使ったことがありませんが、MSのと大して変わりないという前提で答えると、 CreateProcessは、指定した実行形式ファイル(EXEとか)を新しいプロセスで動かすAPIです。"< text.txt > r.txt"という部分は、EXEファイルのパス名とは関係ない話であって、command.comが解釈して標準出力や入力を制御するための部分なので、CreateProcessに渡しても、思ったとおりの動作をしません。 system()というライブラリ関数はありませんか? これならば意図どおりの動作をするはずです。
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
<や>を使った標準入出力のリダイレクトは、command.comやcmd.exeの機能です。 なので、NT形のOSなら cmd /c test.exe <test.txt >r.txt こうする必要があります。 >APIのCreatePipe関数でプロセス間の通信が >可能なようなので,CreatePipeを使えばいいかと >考えました。どうでしょうか? できますけど、質問したらほったらかしですか?
補足
回答ありがとうございます。 遅くなりました。 <も>も,command.comやcmd.exeの機能ということを 初めて意識できました。 >できますけど、質問したらほったらかしですか? すみません。 べつにほったらかしてるつもりはなかったのですが。 CreatePipeをしながらも,あまりよくわからなかったので 他の方法を考えたりしてたら,返事しそびれてました。 あと,ずっとネットができる環境ではないので, 返事をするのが不規則になるんですけど・・・
- sawayakana_yoru
- ベストアンサー率11% (3/27)
DOSではファイル入出力処理に割り当てられてますねその記号。 test.exe < test.txt > r.txt はtest.exeを実行した結果をtest.txtに入力して、r.txtに出力するといういみですが、(逆だったかな?) いずれにせよそれでは引数で渡せないでしょう。 ..> test.exe "<test.txt>r.txt" ではどうでしょうか?
補足
さっそくの回答ありがとうございます。 DOS上では ..>test.exe <test.txt >r.txt で動くのですが, ..> test.exe "<test.txt>r.txt" ↑はDOS上のことを言ってるのでしょうか…?
補足
system()ですか。さっそく調べてみます。 回答してくださってありがとうございます。 ちなみに,もう一つ方法を考えています。 最初の質問では,テキストファイルで文字列を 渡すというもの。 そして,もう一つの方法ですが, APIのCreatePipe関数でプロセス間の通信が 可能なようなので,CreatePipeを使えばいいかと 考えました。どうでしょうか? もしよかったらお返事下さい。