同じルートディレクトリを持つ2つのサブディレクトリが同じマウントされたファイルシステムにあることは保証されますか?

同じルートディレクトリを持つ2つのサブディレクトリが同じマウントされたファイルシステムにあることは保証されますか?

cpp私が使用するファイルは、パスがmkdir( path, ... )環境変数(たとえばgetenv( "FOO" );)から来るディレクトリを生成します。

たとえば、上記で生成された$FOOファイルは `/foo/newPath/'/fooです。path

私の問題のシナリオでは、/foo/oldPath/コンテンツ(他のサブディレクトリがないと仮定)があるかもしれませ/foo/oldPath//foo/newPath

私の質問は:/foo/newPath/ieのサブディレクトリとして作成され、同じ親ディレクトリを持つ$FOOので、両方のディレクトリが同じ「マウントされたファイルシステム」にあることが保証されていますか? Linuxのマウントポイントとファイルシステムの私の理解は、せいぜい弱いです。/foo/newPath//foo/oldPath/

この質問の背景は次のとおりです。同じマウントされたファイルシステムにある場合は、他の選択肢よりもファイルの移動を簡単に実行できます/foo/newPath/。この関数のマニュアルページには、同じ「マウントされたファイルシステム」にあり、そうでない場合は失敗することが示されています。/foo/oldPath/rename()oldPathnewPath

ベストアンサー1

彼らはこれを保証することはできません。これは/foo/oldPathマウントポイントです。

mount | grep 'on /foo/oldPath'oldPathただし、これは「ディレクトリがマウントポイントではないことを示す出力があってはなりません」を実行することで簡単に確認できます。

入れ子になったディレクトリを使用している場合は、どこにもマウントポイントがある可能性があるため、さらに注意が必要です。

これが自動かどうかはわかりませんが、マウントの3番目のフィールド(スペースで区切られています)が各行のマウントポイントであるため、注目に値します cut -d ' ' -f 3。たとえば、他のマウントポイントの部分文字列ではありません/foo/oldPath/nested/mountPoint.)

C / C ++コードに変換したい場合はそれを使用できますが、system("mount | grep 'on /foo/oldPath'")誓うことはありません。必要に応じて StackOverflow でより多くの実装の詳細を取得できます。

おすすめ記事