それらはそれを保証するものではありません。 07
の可能性があります はマウント ポイントです。
ただし、これは 16
を実行することで簡単に確認できます 24
であることを示す出力はありません。 ディレクトリはマウント ポイントではありません。
ネストされたディレクトリを使用している場合は、マウント ポイントがどこにでもある可能性があるため、より注意する必要があります。
これが自動化されているかどうかはわかりませんが、mount から 3 番目のフィールド (スペース区切り) が各行のマウント ポイントであることに注意してください。 パスを抽出するために使用できます (46
のような別のマウント ポイントの単なる部分文字列ではないことを確認する必要がある場合) )
これを C/C++ コードに変換したい場合は、 54
を使用できる場合があります 、しかし、私はそれを誓いません。実装の詳細が必要な場合は、StackOverflow を参照してください。
さまざまな理由で、これを試みるべきではありません (他の回答で詳しく説明されています):67
それ自体がマウントポイントであるか、オーバーレイ ファイル システムが存在し、ファイルの移動を妨げている可能性があります。ファイルの名前を変更するときにも問題を引き起こす、単一のファイルに対するバインド マウントに遭遇することさえあります。
ファイルの名前を変更できるかどうかを事前に判断するのではなく、ファイルの名前を変更してエラーに対処する必要があります。 79
エラーが発生した場合は -1 を返し、86
を返します。 96
に設定されます クロスマウントの問題のために名前を変更できない場合。その後、別の方法 (コピーと削除) に進むことができます。
一般に、2 つのファイル システム オブジェクトが同じファイル システム上にあるかどうかを判断するには、103
を実行する必要があります。 デバイス識別子 (110
126
のフィールド )。同じファイル システム上の 2 つのファイル システム オブジェクトは、同じデバイス識別子を持ちます。
overlayfs で実行する場合、130
に依存できないことに注意してください。
汎用ファイル管理ツールを作成していない場合は、通常、この可能性を無視できると思います...たとえば、パッケージマネージャー...その場合、(原子性の理由で)修正可能とは見なされず、新しい 142
に依存する overlayfs のフォーマット。
したがって、これはこれが Linux であることを知らせるための、より衒学的なメモです。必要がなければ POSIX に準拠しません。「保証されている」という言葉は非常に強力な言葉です :)
https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt
<ブロック引用>「redirect_dir」機能が有効になっていない限り、下位またはマージされたディレクトリでの rename(2) は EXDEV で失敗します。
Overlayfs は、その他の詳細において UNIX ファイルシステムの通常の期待とすでに一致していません:
<ブロック引用>ディレクトリではないオブジェクト (ファイル、シンボリック リンク、デバイス スペシャル ファイルなど) は、必要に応じて上位または下位のファイル システムから提示されます。下位のファイルシステムのファイルが、書き込みアクセスのために開いたり、一部のメタデータを変更したりするなど、書き込みアクセスを必要とする方法でアクセスされると、ファイルは最初に下位のファイルシステムから上位のファイルシステムにコピーされます (copy_up)...
copy_up 操作は、基本的に新しい同一のファイルを作成し、それを古い名前に移動します。 この inode を参照する開いているファイルは、古いデータにアクセスします。