[pgsql-jp: 33606] Re: 改行の問題について

Kazumasa Gotoh kgotoh @ cic-kk.co.jp
2004年 7月 10日 (土) 10:57:34 JST


本題とは関係ない話題です。(^^;

From: Koichi Hyodo <sio-0 @ rh.to>
Date: Sat, 10 Jul 2004 02:02:58 +0900

> Unix世界には詳しくありませんが明示的なEOFコードが使われることは
> 滅多にないとおもいます。

Unix 系 OS のファイル中には EOF コードというものは存在しません。

   $ cat > a
   aaaa
   bbbb
   cccc
   ^D
   $ cat a
   aaa
   bbb
   ccc
   $ 

という事もできるので、^D すなわち 0x04 が EOF コードだと思っている
方がたまにいらっしゃいますが、これは端末装置から LF 後の最初の送信
文字が ^D だと、(この場合は cat に対しての)入力処理終了を示した事に
なり、cat 側から見ると結果的に「EOF を検知した」となります。
上記で、bbb のところで bbb^D としても入力終了とはならず、ccc の
行の入力が可能ですので、^D そのものが EOF だというわけではありません。
あくまでもターミナル制御の仕様の問題です。

シェルプロンプトが出ている状態で、行頭からいきなり ^D を押すと
logout してしまうので、Unix を使い始めた時(何年前かは内緒)に
「何が起きたんだ?」とまどったことがあります。
何のことはなくて、他に何も入力文字がない状態で ^D を送るとシェルに
対する入力終了指示になり、シェルが終わる… すなわち logout する
だけの話なんですけど。

Windows では ^Z すなわち 0x1a が EOF コードとしても機能しますが、
これも必ずなければならないというわけではありません。
これは、MS-DOS 以前の CP/M の仕様をいまだに引きずっているためです。
そういや、Windows の改行コードが CR LF なのも CP/M 由来か。

これのおかげで、Windows 系では 21世紀になっても、fopen() でテキスト
モードとかバイナリモードなんていう区別があるんですよね。

8bit OS である CP/M の時にはそれなりの合理性があったのかも知れませんが、
今となっては正直、迷惑なだけです。

MS-DOS/Windows のエディタの中にはファイルの末尾に勝手に ^Z を
つけてくれるのがあって、Unix に持って行くとそれで困った人も
多いでしょう。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
(株) セントラル情報センター
                             後藤和政    kgotoh @ cic-kk.co.jp



pgsql-jp メーリングリストの案内