In article <20031224.012936.03977413.taca / back-street.net>,
  Takahiro Kambe <taca / back-street.net> writes:

> どうなんでしょうね。ざっと、そこいらの ungetc(3) を見ると明らかなのは、
>
>      One character of push-back is guaranteed.
>
> というあたりは確実なようです。もうちょっと探すと"ANSI C Rationale"とい
> う正式な標準ではないもの(<http://www.lysator.liu.se/c/rat/title.html>)
> がありました。その4.9.7.11 The ungetc functionの冒頭には、
>
> The Base Document requires that at least one character be read before
> ungetc is called, in certain implementation-specific cases.  The
> Committee has removed this requirement, thus obliging a FILE structure
> to have room to store one character of pushback regardless of the
> state of the buffer; it felt that this degree of generality makes
> clearer the ways in which the function may be used.
>
> とありました。

おぉ、以前 1byte 以上読んでからでないと ungetc は使えないと読んだ覚え
があったのですが、その制約は仕様ではないのですね。

>> したがって、Ruby としては、そういう危ないのをユーザに指示されたからと
>> いって呼んでいいのか、というところが問題なわけです。
> 危ないのは「readせずにungetc(3)」ではなく、そこにバグを持つ実装が存在
> するということになりそうです。

でも、write 直後の ungetc はどうなんでしょう?

read/write の間には fseek や fflush を入れなければならないという制約が
あります。write と ungetc のあいだになにかを入れなければならないという
制約は無いのでしょうか?
-- 
[田中 哲][たなか あきら][Tanaka Akira]