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()
oldPath
newPath
ベストアンサー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 でより多くの実装の詳細を取得できます。