マウントポイントとして新しいディレクトリを作成するmount(2)
必要がある場合、読み取り専用ファイルシステムの下には何もマウントできません。それは馬鹿げているので、それを除外することができます。
mountがオプションでマウントポイントとなる新しいディレクトリを作成した場合、それは奇妙です。マウント/アンマウントが常に発生するわけではないので、1つのシステムコールでこれら2つのステップを実行するためにカーネルに追加のロジックを配置しても、重要なスピードアップにはなりません。mkdir(2)
必要に応じてシステムコールを行うために、ユーザースペースに任せてください。ドミトリーの答えmount(2)
は、両方のことを行うと非原子的になると指摘しています。そして、あなたはに追加の引数をしたいと思うmount(2)
ようにモードフラグを持つopen(2)
ために、とりO_CREAT
、O_EXCL
それはちょうど愚かなユーザ空間はそれを行うせることに比較されるなど、。
それとも、mount(8)
(mount(2)
システムコールを行う従来のプログラム)がこれを行うことについて尋ねていたのでしょうか?それは可能かもしれませんがmkdir(1)
、仕事にはすでに完全に良いものがあり、Unixの設計はすべて、組み合わせることができる良い小さなツールに関するものです。両方を実行するツールが必要な場合は、シェルスクリプトを作成して、2つの単純なツールからそのツールを作成するのは簡単です。(または、muruがコメントしたように、udisksctl
すでにこれを行っているので、書く必要はありません。)また、Linuxのmount(8)
util-linuxからの通常は、ファイルシステムに渡すオプションではなく、ユーザースペースのオプションmount -o x-mount.mkdir[=mode]
のx-
構文の使用をサポートします。
さて、より興味深い質問:なぜ親ファイルシステムにディレクトリが必要なのでしょうか?
pjc50の答えが指摘しているように(彼は私のイニシャルを持っていても関係ありません!)、ディレクトリリストにマウントポイントが表示されるようにするには、everyの追加チェックが必要になりますreaddir()
。
(親FS上の)それらを含むディレクトリ内にディレクトリとしてマウントポイントが存在することは、素晴らしいトリックです。 readdir()
マウントポイントであることに気付く必要はありません。これは、マウントポイントがパスコンポーネントとして使用されている場合にのみ発生します。もちろん、パスの解決では、パスのすべてのディレクトリコンポーネントのマウントテーブルをチェックする必要があります。
udisksctl
。なぜ使用mount
?