Peripheral Interchange Program

Peripheral Interchange Program（PIP）は、DEC製コンピュータにおけるデータファイル転送ユーティリティ。1960年代に PDP-6 上で最初に実装された。その後、PDP-10 や PDP-11 にも実装されている。

歴史 
PIP は当初 ATLATL（"Anything, Lord to Anything, Lord" の略）と呼ばれていた。この名称はデバイスに依存しないファイルコピーツールであることを示している。

紆余曲折を経て、以下のような構文に落ち着いた。
PIP destination=source
この語順は一般的な英語の語順とは逆である。そのため、PDPマシン上の数あるユーティリティの1つとして、次のようなコマンド構文も生まれた。
COPY source destination 
しかし取って代わられたわけではなく、1980年代中ごろにも PIP は普通に使われていた。

CP/M での PIP 
ゲイリー・キルドールは CP/M で PIP とファイルのコンセプトをRSTS/Eなどから流用した。フロッピーディスク間でのファイルコピー(使用例 A>PIP B:=*.*[V] によって、ドライブ A の全ファイルをドライブ B へベリファイ付きでコピー)のようなフロッピーディスク上のファイルにアクセスするだけでなく、CP/M の PIP は以下のような「スペシャルファイル」間でデータ転送が可能だった(使用例 A>PIP LST:=SAMPLE.TXT によって、SAMPLE.TXT ファイルをリスト出力デバイスへ)。
CON: — コンソール （入出力）
AUX: — 補助デバイス。CP/M 1 および 2 では、AUX: ではなく PUN: （紙テープパンチ）と RDR: （紙テープリーダー）を用いていた。
LST: — リスト出力デバイス。通常はプリンター
PRN: — LST: と同じ。ただし、行番号が付与され、タブ文字が拡張され、60行毎にフォームフィードが付与される。
NUL: — ヌルデバイス。入力としては /dev/zero、出力としては /dev/null として機能する。
EOF: — End Of File 文字（ASCII 0x1A）を生成する入力デバイス
INP: — カスタム入力デバイス。デフォルトでは EOF: と同じ。
OUT: — カスタム出力デバイス。デフォルトでは NUL: と同じ。

これらはPIPでしか使えないため、真のスペシャルファイルではない。2つのカスタムデバイスは、PIPプログラムの先頭から固定の位置に呼び出しコードが実装されていた。これは、ユーザーやOEMがその位置にパッチを当てることで独自の入出力機器をサポート可能とすることを意図していた。プログラム内にはそのための246バイトの空き領域が用意されていた。

CP/M では PIP destination=source という構文だけでなく、PIP destination_source という構文もあった。これは、端末によっては '_' を左向きの矢印で表示するものがあったためである。つまり、PIP destination←source のように表示された。これは文書には明記されておらず、CP/M ではファイル名に使える文字の種類が明確に定義されていなかった。このため、アンダースコアを使ったファイル名もエラーにはならず、そのようなファイルはPIPでうまく扱えない。

関連項目 
copy (コマンド) - DECのマシンや DOS、OS/2、Windows でのファイルコピーコマンド
cp (UNIX)
カーミット (プロトコル)

脚注 

CP/M
OSのファイルシステム