B.2. "ASCII アップロード" と cat

cat はあらゆる UNIX ライクなシステムで使えます。 このコマンドは、キーボードから受けとったデータをファイルにコピーします。 Minicom や他の端末エミュレータには ‘ASCII upload’ という機能があり、 ファイルをキーボードから入力したものとして、シリアルリンクへ送ります。

remote bash$ cat > upload.txt
Alt-S Upload ascii
[ascii upload - Press CTRL-C to quit]

アップロードが完了するのを待ちます…

ASCII upload of "upload.txt"
10.0 Kbytes transferred at 3900 CPS... Done.
READY: press any key to continue...
Ctrl-D
remote bash$

ハードウェアフロー制御をしていないと、ASCII アップロードで、 たまに文字落ちが起こります。

バイナリファイルをアップロードするには、それを ASCII にエンコードし、アップロードします。そしてそれからもう一度バイナリに デコードします。

localhost bash$ uuencode upload.bin < upload.bin > upload.txt
Alt-S Upload ascii
[ascii upload - Press CTRL-C to quit]

アップロードが完了するのを待ちます…

ASCII upload of "upload.txt"
10.0 Kbytes transferred at 3900 CPS... Done.
READY: press any key to continue...
Ctrl-D
remote bash$
remote bash$ uudecode < upload.txt

転送エラーは sumcksum 、 あるいは md5sum といった、 チェックサムプログラムを使えば検出できます。 ローカルマシンからそのファイルを転送する前と、 リモートマシンで受けとった後に、そのチェックサムを印刷しておきます。

localhost bash$ cksum upload.bin
1719761190 76 upload.bin
remote bash$ cksum upload.bin
1719761190 76 upload.bin

チェックサムを計算するプログラムは数多くありますが、 sum コマンドを使う場合は注意してください。 というのは、BSD 用と System V UNIX 用に多くのバージョンがあり、それらが違う結果を出すからです。 cksumPOSIX 標準の開発者たちが、この混乱を収拾しようとした産物です。 このコマンドは、すべての POSIX マシン上にある、同じファイルに対して同じ結果を返します。

元のチェックサムと、 アップロードしたファイルのチェックサムが一致しない場合は、 もう一度ファイルをアップロードしなければなりません。 リンクにノイズが多くファイルが大きい場合は、 アップロードはけっしてうまくいかないかもしれません。 この場合に必要なのは、ファイルを小分けにして、 その一つをアップロードし、チェックサムを確認し、 大丈夫なら次をアップロードするというやり方です。

こういうことは自動化すべきもののように思えるでしょう。 続きは Xmodem から始めます。