No.1ベストアンサー
- 回答日時:
まず, fork を使うとプロセスが複製されるのですが, 基本的に「fork を実行したときと同じ状態」のプロセスが新しく作られることになるため, fork を実行する前にファイルをオープンしていたら fork によって作られる新しいプロセスも同じファイルをオープンしていることになります.
これが「参照関係を継承する」という話.
一方, 参照数 の方は Unix におけるファイルの管理方法と関係します.
Unix では, あるプロセスがファイルをオープンしている場合にはそのファイルを削除しても実体がただちに消滅するとは限りません. ディレクトリエントリからは消えますので他からは見えなくなりますが, そのファイルをオープンしているプロセスは自分が持っているファイルハンドルを使って削除されたはずのファイルにアクセスすることができます.
その結果「ファイルを削除してもディスクの空き容量が減らない」ということもありうる (あるプロセスがオープンしていればファイルの実体は消えないので) のですが, その一方で一時ファイルの管理が簡単になります. つまり, 一度ファイルを作成してオープンしたあとすぐに削除すれば「当該プロセスからはアクセスできるが他のプロセスからはアクセスできない」ファイルになります.
このような処理をうまく行うために Unix では参照数を使っています. 簡単には, 次のような処理を行います:
まず, ファイルを作成するときにはそのファイルに対するディレクトリエントリを作るのですが, このときにそのファイルの参照数を 1 とします. それ以降は
・プロセスがファイルをオープンしたら参照数を 1 増やす
・クローズしたら参照数を 1 減らす
・ハードリンクを作ったら参照数を 1 増やす
・ファイルを削除したら参照数を 1 減らす
のように操作していきます.
このようにしておけば, 「参照数が 0 であるファイル」=「どこからも参照されていないファイル」=「不要となっているので使っていた領域を再利用してかまわないファイル」ということになります.
なお, 参照数を使っているため基本的にディレクトリに対するハードリンクは特定の操作 (mkdir) でしか作ることができません. ディレクトリに対して自由にハードリンクを作ることができるようにするとループができてしまい, 管理上大きな問題になってしまいます.
参照数とその問題点についてはプログラムにおけるメモリ管理, 特にガベージコレクション (garbage collection, GC) という文脈でも出てきますので可能であればそちらも参考にしてはどうでしょうか.
この回答へのお礼
お礼日時:2004/08/01 17:47
なるほど、詳しくありがとうございます。
いつも「おしえてgoo」のみなさんには、お世話になってます。
自分でも他の人に教えてやれるようになりたいのですが、他の人の質問と回答を読むのでやっとです。(^^;;)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 【スプレドシート】IMPORTRANGE関数とSUMIFSの組み合わせ 1 2023/03/05 18:17
- Excel(エクセル) こんにちは。ExcelのVLOOKUP関数のことで教えてください。 2 2022/05/07 11:33
- その他(プログラミング・Web制作) Pythonでexcelのvbaを作成、実行する方法について Pythonで表の自動集計プログラムを 3 2022/07/09 09:58
- Excel(エクセル) エクセルでのアクセス履歴をとりたいです 1 2022/06/13 17:30
- Excel(エクセル) エクセルでセルの日付を和暦表示設定にしたらおかしなことに? 3 2022/05/25 11:47
- IT・エンジニアリング エクセルでの 日付の認識 2 2022/08/23 13:40
- 仕事術・業務効率化 時給交渉の理由になるでしょうか? 4 2022/10/13 08:40
- ネットワーク しばらくするとネットワークの参照ができなくなる 4 2023/06/17 16:56
- Excel(エクセル) エクセルで対象日に該当するデータがある場合に別表へ全対象者を表示させたい。 3 2023/07/12 09:48
- Excel(エクセル) エクセル関数についてお教えください 3 2023/07/24 12:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
ドラッグアンドドロップでファ...
-
csvファイルを開かずに文字を検...
-
Javascript で INI の読み書き
-
分割コンパイルの#defineについて
-
テキストファイルの最終行を削...
-
ファイルを記録してあるセクタ...
-
クリップボードから任意のファ...
-
C言語のfopenについて教えてく...
-
Excelファイル、セルの読み書きで
-
バッチで118項目のCSVを処理し...
-
COBOLでの可変長定義について
-
エクセルVBAでフォルダ内の重複...
-
SGファイルって何ですか?
-
BI書、FD書 とは
-
VB.NETによるプロセス間通信
-
WAVファイル同士の結合が可...
-
ハッシュの計算時間について
-
ファイルの結合
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
dataファイルをxtxファイルにす...
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
テキストファイルの最終行を削...
-
ファイル名の先頭にアンダース...
-
大きいサイズのテキストファイ...
-
グローバル変数のよくない使い...
-
fopenできる上限の変更
-
ハッシュの計算時間について
-
VBに、Cのincludeのようなもの...
-
CSVファイルへの保存の際、デー...
-
分割コンパイルの#defineについて
-
VBAにてEXCEL以外のファイル(テ...
-
iniファイルに追記がしたいです。
-
ドラッグアンドドロップでファ...
-
SGファイルって何ですか?
-
同じ名前のファイルを作った場...
-
アドレス帳WABファイルをサンダ...
-
ダイアログボックスで複数フォ...
-
「VBScript」ADODB.Streamにお...
おすすめ情報