Windows プログラミングネタ。
コンソールプログラムにて標準出力を行う方法はいくつかあります。
まずは誰もが最初に通る、printf() 関数。
続いて stdout のハンドルを利用して fwrite や fprintf で出力を行う。
WinAPI を用いて、GetStdHandle(STD_OUTPUT_HANDLE) でハンドルを取得して WriteFile 等
で行う。
そして最後はコンソールに特化した WriteConsole で行う方法。
何でこんな事を書いたかと言うと、携帯 iアプリのプラットフォーム Doja/Star の開発環境のために、
標準入力 から読み込んだデータを 標準出力 に出力
するだけのツールを開発していたのですが、WriteConsole で出力された場合は、標準入力から
ReadFile() などを利用しても、全く読み取れない事に気がついた。
これは自分の受け取り方が悪いのかな?と思ったんだけど、コマンドプロンプトの find コマンドでも
読み取れなかった。
writeconsole.exe | find "test"
WriteConsole() で出力されたのは ReadFile() などで読み込めないのは Microsoft 仕様だろうけど、
標準入力で受け取れないなら、どうやって読み込むのだろうか。
ReadConsole() で読み込む様な気はする所ですが、自プロセスの既存のコンソールハンドルって
どうやって取得するのか?
うーむ WriteConsole() を用いて、パイプで標準入力データとしては受け取れないってのは非常に
残念仕様。
0 コメント:
コメントを投稿