過去の投稿記事 new!
・【画像】漫画でわかる外国人参政権
・東京電力のHPで停電状態が確認できたり(サービス再開!)
・戦国時代 ~ 江戸時代の徳川家康が熱かった
・vaio のバッテリは寿命が短いような気がする
・話題の Western Digital 製 WD20EARS を購入した
・C01LC をビックカメラで買ってきた
・2025年には空中都市が現実化?!
・【動画】わかりやすい「宇宙ひも理論」
・今世紀には「富士山噴火」「東海連動地震」「首都圏直下型地震」か?
・滅びた町、南浜町が Googleストリートビューで見れる

【 amazon 送料無料キャンペーン 】

バックリンクはご自由にどうぞ!     http://mfsocket.blogspot.com/feeds/posts/default?alt=rss リンク集 / ログイン

2010/02/08
【VC】WriteConsole で出力するとパイプで標準入力を受け取れない

 
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 コメント:

  • コメントには <b>, <strong>, <em>, <i>, <a> など一部の HTML タグを使用できます。