[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[connect24h:10677] Re: WIN にて古いファイルを削除



はせがわです。

On 3/30/06, Tomoki Sanaki <sanaki@xxxxxxxxxxxx> wrote:
> 結論
> 基本的に Windows (Winプログラマの視点ですが)は
> 「"」で囲んだものは一つにしてくれて、プログラムに渡すようだ。

Windows におけるコマンドライン引数の機能は、渡す側 つまり
CreateProcess においても、受け取る側の GetCommandLine に
おいても、ただ単純に単一の文字列のみとなっています。
ダブルクォートが入っていた場合にどのように扱われるかは、
例えば C であればランタイムライブラリ(CRT)やスタートアップ
ルーチンの実装によって異なります。これは C の処理系によって
異なり、CMD.EXE とは関係ありません。
例えば、MS-DOSな話になりますが、LSI C-86 などであれば、
^ や ' などによるクォートもサポートしています。

ですので、必ずしもダブルクォートで囲まれた文字列がひとつに
まとめられる、という保証はありません。

> 一方で UNIX 系も csh 系と sh 系で微妙に挙動が異なりますね♪
> (なんのために調べ上げたんだろう、おいら ^^)

UNIX では exec(2) にて、各プログラムに複数の引数を配列として
引き渡す機構がOSとして準備されています。
ですので、あとはユーザがコマンドラインから入力した1行分の文字列を
どのように解釈して配列に展開するかはシェルの実装にかかってきます。

以下余談。
C の argc/argv をはじめ、古い言語のコマンドライン引数の取得は
ANSIコードページベースで行われるため、Unicode なファイル名を
引数として与えてやると簡単に破綻します。
http://pcweb.mycom.co.jp/articles/2005/11/07/blackhat/

特に、コードページ1252のようにUnicodeからの変換により " に置き
換わる文字が存在する環境では、さらにやらしいことが起こるかも
知れません。

--
HASEGAWA Yosuke
    yosuke.hasegawa@xxxxxxxxx

--[PR]------------------------------------------------------------------
★★ 全部の「デジタル放送」の環境が初期費用無料 ★★
   「地上波」「BS」「WOWOW」「110°CS」等を一気に視聴!!
     ●●WOWOWだけなら更にお得でスピード加入●●
             http://ad.freeml.com/cgi-bin/ad.cgi?id=dTLPC
------------------------------------------------------------------[PR]--
■GMO INTERNET GROUP■ GMO INTERNET www.gmo.jp