TMPとTEMPの環境変数が両方存在するのはなぜか? (2015)
概要
- 環境変数TMPとTEMPは、一時ファイルの保存場所を指定するために存在
- 歴史的経緯により、どちらを使うかはプログラムごとに異なる
- MS-DOSとWindowsの進化の中で両者が併存
- 一部プログラムは両方をチェックし、優先順位もまちまち
- WindowsではGetTempFileName関数がTMPを優先
TMPとTEMP:一時ファイル用環境変数の歴史
-
1973年当時、CP/Mには環境変数が存在しなかった
- 一時ファイルの保存先は、プログラムごとに実行ファイルのバイトを書き換えて設定
-
WordStarのようなCP/Mプログラムは、マニュアルにパッチ方法を記載
- 独自サブルーチン用のパッチスペースも確保
- プリンタ制御などのカスタマイズ例
-
1981年、8086プロセッサとMS-DOSが登場
- 設計目標はCP/Mプログラムの機械翻訳による移植性
- 8080のHLレジスタが8086のBXレジスタに対応
- 移植性重視のため、MS-DOS初期プログラムは環境変数を利用しなかった
-
MS-DOSが進化し、環境変数の導入
- 新規開発プログラムが設定情報として環境変数を利用
- 一時ファイル保存先としてTEMPとTMPが登場し、両者が主流に
-
MS-DOS 2.0でパイプ機能追加
- 一時ファイルの保存先にTEMPを採用
- しかし、他プログラムはTEMPまたはTMPのどちらか、あるいは両方をチェック
- DISKCOPYやEDITはTEMP→TMPの順で確認
Windows時代のTMPとTEMP
- WindowsではGetTempFileName関数がTMPを優先
- Windowsプログラムはこの関数を利用することが多い
- 環境変数設定画面には今もTMPとTEMPが併記
- どちらが使われるかはプログラム次第
- まさに「Adidas対Puma」のような共存状態
著者情報
- 著者Raymondは30年以上Windows進化に関与
- 2003年にWebサイト「The Old New Thing」を開設
- サイトは予想以上の人気を博し、書籍化も実現(Addison Wesley 2007年)
- Windows Dev Docs Twitterでも時折登場し、ユーモラスなエピソードを発信