スクリプト/ファイルの終わりをどのように決定するのか疑問に思います。 私は特にV6のような古いUnixバージョンに興味があります。
書かれた最後の文字の後に「\ 0」がありますか?
答え1
以前のUnixのユーザーモードプログラムでも、ファイルの末尾に「パッド」バイトは表示されません。 MS-DOSまたはCP / MがディスクブロックをCtrl-Z文字で埋めることがわかっているため、ファイル読み取りアルゴリズムはディスクブロックの終わりだけでなくパディングバイトも確認する必要があります。
Unixはこのようなことをしたことがありません。プログラムは、ファイル終了条件が発生するまでバイトを読み取ります。これはread(2)
、システムコールの場合は0を返すことを意味します。残念ながら、長期実行システムの呼び出しがread()
中断され、エラーコード(-1)が返され、グローバルシンボルがerrno
EINTRと評価されるため、Unixは伝統的に特定のデバイスを読み取るときに少しばかげています。
これらすべてにはファイルシステムの側面もあります。 Unixファイルシステムはデータをディスクブロックに保存し、ファイルサイズ(バイト)値をinodeに保持します。一部の他のオペレーティングシステムでは、ファイルサイズはブロック単位でのみ保存されます。データがブロックより小さい場合、問題はユーザー空間に浸透し、パディングバイトやその他の不可解な問題で発生します。
答え2
不要。シェルインタプリタは、いくつかの(複雑な)システムコールラッパー(たとえば、read()
ややfread()