お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2007-10-27 08:39:26

kenken92
メンバ
登録日: 2007-10-27

wineでのリダイレクト実行

 もともとWindowsのC++builderで開発したプログラムがあり、ちょっとした手直しでwineを用いて動かしたいと思います。このプログラム(abc.exeとします)は

system("hoge.exe < model.dat > output.dat")

のように処理しているところがあるのですが、ここでつまずくようです。ここでhoge.exeは外部プログラムで計算ソルバー、model.datは問題のプログラム(abc.exe)で作成したテキスト形式のモデルファイル(実質テキストの羅列)、output.datはソルバが吐いたものをリダイレクトで受けたテキストファイルです。
 abc.exeでmodel.datは作成できるのですが、どうもパス名でこけるらしく、mopdel.datの入力、及び、output.datへの出力に失敗するようです。リダイレクトを用いてデータの受け渡しにリダイレクトを用いる場合どうすればよいでしょうか。

オフライン

 

#2 2007-10-27 11:04:48

hito
管理者
登録日: 2007-03-18

Re: wineでのリダイレクト実行

Win32でリダイレクトを処理する主体を把握していませんが、cmd.exeがないので
リダイレクトが処理されない、ということはないでしょうか?

あとは、ShellExecuteでcmd.exeに食わせるという手も試してみる価値が
ありそうですが、プログラム側を弄るのは避けたいですよね。

# TStreamのどれか(ってこの場合TFileStreamしかないか)でその処理を
# 書き直してもいけそうな気はしますが、コマンドラインプログラムで
# VCLにリンクさせるのはイヤかも。

オフライン

 

#3 2007-10-27 15:03:24

kenken92
メンバ
登録日: 2007-10-27

Re: wineでのリダイレクト実行

 回答ありがとうございます。

 このときに行っている命令はAnsiStringの変数に一旦書き込んでいるんですが、この際にファイルにもデバグのため書き込んで残してあります。このファイルを開いてこの文字列をそのままターミナルで実行すると(但しmodel.datは同じ場所において)ちゃんと実行できます。少なくともLinuxのターミナルでは実行できるようなのです。

オフライン

 

Board footer

Powered by FluxBB