« WindowsコマンドプロンプトにUnicode表示 | トップページ | 意外な方法でSearchFilterHost.exeの暴走が止まる »

2013年3月31日 (日)

「WindowsコマンドプロンプトにUnicode表示」の訂正

Unicodeに関する前回の記事には、一部間違ったcmd.exeに関する内容が含まれている。これは私が、Windowsコンソールはcmd.exeに従属していると誤認したまま記事を書いてしまったからだ。

元の記事に訂正を入れるとかなり見づらくなりそうなので、別途訂正記事を掲載することにした。

/*******  *******/

Windowsコンソールの正しい位置づけ

英語のMSDNにはちゃんとした説明があるのだが、日本語では「この言語では現在このコンテンツをご利用になれません。このコンテンツの英語版は、こちらでご覧になれます。」と明記されてしまっている。

英語のMSDNに記載された内容の要点は、

  • GUIを持たないコンソールプロセスに標準入出力と標準エラー出力を提供する、Windowsのベースサービス
  • プロセスから独立している(特定のプロセスと結びついている訳ではない、と言う意味)
  • main関数をエントリーポイントとするコンソールプロセスが生成される際に、システムは新しいコンソールを生成する(ディフォルトの動作)

「ファイル名を指定して実行...」にnslookupを入力すると、explorer.exeの子プロセスとしてnslookup.exeが起動され、同時にコンソールが生成される。このコンソールはnslookup.exeの実行が終わると閉じてしまう。

コマンドプロンプトを開くと、explorer.exeの子プロセスとしてcmd.exeが起動され、同時にコンソールが生成される。ここにnslookup [Enter]と入力すると、cmd.exeの子プロセスとしてnslookup.exeが起動される。この時コンソールは、実行が終わるまでnslookup.exeに乗っ取られている、と言う事らしい。コンソールは、nslookup.exeの実行が終ってもcmd.exeが取り戻すので、開いたまま残る。

つまりコマンドプロンプトから起動されたプログラムの実行中、cmd.exeは何もしていないと考えるべきだ、と言うこと。パイプ記号(「|」)を使って複数のプログラムを起動した場合も、cmd.exeはパイプのセットアップまでは行うが、管理は起動されたプログラムに委ねられる。

 

前回記事で「cmd.exe」に言及した箇所の正誤

「3ヶ国語+αでこんにちは」の節

  • 最後から4番目の段落(言及1箇所):正しい。

「標準入力の場合」の節

  • 最初の段落(言及2箇所):どちらも正しい。

「素朴なUnicode対応だと日本語が表示できない場合がある」の節

  • 最後の段落(言及2箇所):どちらも正しい。

「モードをUnicodeにするアプローチ」の節

  • 第2段落(言及1箇所):正しい。

「おまけ」の節

  • 第1段落(言及1箇所):ユーザー入力を標準入力にShift JISで渡しているのはcmd.exeではなくコンソール。
  • 第2段落(言及1箇所):正しい。
  • 第5段落(言及1箇所):cmd.exeはパイプの制御は行っていない。Ctrl+Zが必要になるのは、私の作ったプログラムの仕組みによるもの。
  • 第8段落(言及1箇所):cmd.exeはパイプのバッファーを制御していない。ここで指摘している問題はパイプの管理をWrapperで行っても解決しない。これはprintf関数に関するMicrosoft C Runtimeのバッファー制御に起因しているので、printfを使っているプログラムで対応する以外に簡単な解決方法は無い。
  • 最後の段落(言及1箇所):前項と同じ。

 

今回のまとめ

断片的な情報から勝手な筋書きを作ってしまい、失敗した。関連する関数リファレンスなどの情報が日本語で得られていることで我慢していて、Windowsコンソールに関する具体的な説明が英語のMSDNにあることに気付くのが遅れた。

|

« WindowsコマンドプロンプトにUnicode表示 | トップページ | 意外な方法でSearchFilterHost.exeの暴走が止まる »

IT」カテゴリの記事

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/543745/57075018

この記事へのトラックバック一覧です: 「WindowsコマンドプロンプトにUnicode表示」の訂正:

« WindowsコマンドプロンプトにUnicode表示 | トップページ | 意外な方法でSearchFilterHost.exeの暴走が止まる »