私が知っているオペレーティング システムでは、プログラムがデータをファイルの先頭に効率的に追加する方法はありません。それでも、これは難しいことではないようです。ファイル システムは、必要に応じてファイル記述子に別のエクステントを追加できます。
問題は、なぜオペレーティング システムがこの (かなり些細な) 操作を実装しないのかということです。
私が知っているオペレーティング システムでは、プログラムがデータをファイルの先頭に効率的に追加する方法はありません。それでも、これは難しいことではないようです。ファイル システムは、必要に応じてファイル記述子に別のエクステントを追加できます。
問題は、なぜオペレーティング システムがこの (かなり些細な) 操作を実装しないのかということです。
あなたが提案するほど簡単ではないと思います。ファイルシステムが新しいブロックを割り当て、先頭に追加されたデータをそこに格納し、ファイルポインターをそのブロックを指すように変更し、そのブロックから残りのファイルをチェーンできることは事実です。リンクされたリストの先頭にノードを追加するのと同じですよね?
しかし、(おそらくそうであるように)先頭に追加されたデータが割り当てられたブロックを満たさない場合はどうなりますか。多くのファイルシステムが部分ブロックをチェーンするメカニズムを持っているとは思いませんが、たとえチェーンしたとしても、非常に非効率になるでしょう。ほとんどが空のブロックで構成されるファイルになってしまい、最適化するにはファイル全体を読み書きする必要があります。そもそも先頭に追加するときは、読み書き操作を前もって行うだけでもかまいません。
ファイルの先頭または末尾にデータを追加する場合、スペースの割り当ての問題が常に発生します。ファイル記述子はファイルのストリームの先頭を指しているため、追加のスペースをファイルに追加することは、先頭に追加するよりもはるかに簡単です。ファイルに追加する場合は、ファイル記述子を変更する必要はなく、ファイルのサイズと割り当てられたメモリを変更するだけです。ファイルの先頭に追加する場合は、先頭に追加されたデータを最初に書き込むか、元のファイルが更新されている間に先頭に追加されるデータの場所を保存するために、新しいファイル記述子をすぐにインスタンス化する必要があります。
新しいファイル記述子を作成するのは、それを指す参照も更新する必要があるため、注意が必要です。これが、OS がデータの追加を実装するのが簡単で、先頭に追加するのが少し難しい理由です。