[解決済み] Linuxで開いているファイルハンドルは、指されたファイルが移動または削除されるとどうなるのか?
質問
Linux で開いているファイルハンドルは、指定されたファイルを取得するとどうなりますか。
- 移動された -> ファイル ハンドルは有効なままですか?
- 削除された -> これは無効なファイル ハンドルを示す EBADF につながりますか?
- 新しいファイルに置き換えられた -> この新しいファイルを指すファイル ハンドルはありますか?
- 新しいファイルへのハード リンクによって置き換えられました -> ファイル ハンドルはこのリンクを "follow"していますか?
- 新しいファイルへのソフトリンクに置き換え -> 私のファイル ハンドルは今このソフトリンク ファイルに当たっていますか?
なぜこのような質問をしているかというと 私は、ホットプラグされたハードウェア (USB デバイスなど) を使用しています。デバイス (およびその /dev/ ファイル) がユーザーまたは別の Gremlin によって再接続されることが起こり得ます。
これに対処するベスト プラクティスは何でしょうか。
どのように解決するのですか?
ファイルを移動したり (同じファイルシステム内で)、名前を変更したりしても、ファイル ハンドルは開いたままで、ファイルの読み取りや書き込みに使用することができます。
ファイルが削除された場合、ファイル ハンドルは開かれたままで、まだ使用できます (これは一部の人が期待することではありません)。最後のハンドルが閉じられるまで、ファイルは実際には削除されません。
ファイルが新しいファイルによって置き換えられる場合、それは正確にどのように行われるかに依存します。ファイルのコンテンツが上書きされた場合、ファイル ハンドルはまだ有効で、新しいコンテンツにアクセスできます。既存のファイルのリンクが解除され、同じ名前で新しいファイルが作成された場合、または、新しいファイルを既存のファイルに
rename()
を使用して新しいファイルを既存のファイルに移動した場合は、 削除 (上記参照) と同じになります。
元の
のバージョンを参照し続けるということです。
一般に、一度ファイルが開かれると、そのファイルは開かれたままであり、ディレクトリ構造を変更する誰もそれを変更することはできません。ファイルを移動したり、名前を変更したり、その場所に別のものを置いたりしても、それは単に開かれたままなのです。
Unix では、削除はありません。
unlink()
であり、これは必ずしもファイルを削除するわけではなく、ディレクトリからリンクを削除するだけなので、理にかなっています。
一方、基礎となるデバイスが消滅した場合 (例: USB の取り外し)、ファイル ハンドルはそれ以上有効ではなく、あらゆる操作で IO/error が発生する可能性があります。しかし、ファイルハンドルは閉じなければなりません。この場合、ファイルを開いたままにしておくことは賢明ではないので、デバイスが再び接続された場合でも同じことが言えます。
関連
-
Linux NICがRTNETLINK answersというエラーで起動できない場合、どうすればよいですか?ファイルが存在するか?
-
[解決済み] Linuxの「stale file handle」とはどういう意味ですか?
-
[解決済み] ls を使用してディレクトリとその合計サイズを一覧表示する
-
[解決済み] 共有ライブラリの読み込み中のLinuxエラー:共有オブジェクトファイルを開くことができません。そのようなファイルやディレクトリはありません
-
[解決済み] Linuxカーネルのprocess/unlikelyマクロはどのように動作し、どのような利点があるのでしょうか?
-
[解決済み] ファイル全体を読み込むと、ファイルハンドルが開いたままになりますか?
-
[解決済み】Rubyでファイルを読み込む一般的な方法はすべて何ですか?
-
[解決済み】LinuxのDOSポーズに相当するものは何ですか?
-
[解決済み】open withステートメントを使用してファイルを開く方法
-
[解決済み】最新のLinuxボックスが持つことができるオープンTCP接続の理論上の最大数は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Linux ddコマンド詳細説明:データのバックアップ、およびバックアッププロセスでのフォーマット変換のケース
-
deepin20のサブネットマスクはどこですか?deepinのサブネットマスクを表示するためのヒント
-
LinuxでJenkinsプラグインのインストールが遅い場合の解決策
-
deepin20のデフォルトブラウザを設定するには?deepinにデフォルトブラウザを追加するためのヒント
-
Deepin20システムのフォントを設定するには?Deepin端末のフォントサイズを設定する方法
-
Apache の一般的な設定エラー
-
[解決済み] bash sh - command not found [重複].
-
[解決済み] find .コマンドでディレクトリを除外する方法
-
[解決済み] 出力をファイルや標準出力にリダイレクトする方法
-
[解決済み] Linux/Unixで$PATHを永久に設定する方法 [終了しました].