Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 強制ロックアドバイザリロック

強制ロックアドバイザリロック

  

fcntlは、既存のディスクリプタのコピー、ファイルディスクリプタタグの取得/設定、ファイルステータスフラグの取得/設定、非同期I /O所有権の取得/設定、レコードロックを取得/設定します。

複数のユーザーがファイルを一緒に使用して操作する場合、Linuxは通常、競合するリソースを避けるためにファイルをロックする方法を使用します。

fcntlファイルロックには、アドバイザリロックと強制ロックの2種類があります。•アドバイザリロックは次のように定義されています。ロックファイルを使用する各プロセスは、ラッチがあるかどうかを確認します。既存のロックを尊重します。カーネルとシステムは一般に勧告的なロックを使わないことを主張し、そして彼らはこの規則に従うためにプログラマに頼ります。 (Linuxはデフォルトでアドバイザリロックを使用します)•強制ロックはカーネルによって強制されます。ファイルが書き込み操作のためにロックされると、ファイルをロックするプロセスがロックを解放する前に、カーネルはそのファイルへの読み取りまたは書き込みアクセスをすべてブロックします。

I /O操作にfcntlファイルロックを使用する場合は注意が必要です。I/O操作を開始する前にプロセスがどのようにロックを処理するか、ファイルのロックを解除する前にすべてを行う方法を考慮する必要があります。ロックが設定される前にファイルが開かれた場合、またはロックが読み取られた後にファイルが閉じられた場合、別のプロセスがロック/ロック解除操作とオープン/クローズ操作の間のほんの1秒以内にファイルにアクセスできます。プロセスがファイルをロックするとき、追加されたロックを解放するかどうかにかかわらず、ファイルが閉じられている限り、カーネルは自動的にファイルに添付されている推奨ロックを解放します(これは推奨ロックと必須ロックの最大の違いです)。他のプロセスがファイルにアクセスすることを恒久的に許可しないという目標を達成するために提案ロックを設定したくない(必須ロックが使用可能)^ _ ^;必須ロックはすべてのプロセスに対して機能します。

Linuxでロックを実装する関数はlock()とfcntl()です。 • lock()は、アドバイザリロックをファイルに適用するために使用されます。• fcntl()は、ファイルにアドバイザリロックと必須ロックを適用するために使用されます。同時に、ファイルの特定のレコードをロックする、つまりロックを記録することもできます。

例:•例1、fctnlメカニズムを使用してファイルを操作するプロセスはいくつかありますが(必ずしも関係はありません)、これは整合性のある方法と呼ばれます。 [2]を参照してください。ただし、同時に別の不正なプロセスがある場合は、管理され3721、急ぎ、開いて、書き込みます。現時点では、いくつかのプロセスfcntlはこの方法では何もできません。そのため、これを矛盾と呼びます。ファイルの最終状態は固定されていません。このロックは他のアクセス方法を制限しないため、推奨行ロックと呼ばれます。強制ロックはカーネルサポートを必要とし、ロックは読み取り、書き込み、そしてオープンのためにチェックされます。 •例2では、​​いわゆる暗示的ロックは、人々が1つのことをするために特定の規則に従うと仮定することです。たとえば、人と車は赤いライトが点灯したら停止し、緑色のライトは点灯したままになります。しかし、これはあくまでルールであり、一部の人が赤信号を破壊するのを防ぐことはできません。強制ロックは、あなたが赤信号を粉砕したいということです。 [3]を参照してください。

Linuxシステムで強制ロックを使用する方法を教えてください。

Linuxで強制ロックをサポートしたい場合は、マウント時に-o mandを追加する必要があり(APUE中国語版は間違っていて、_omandと書かれています)、ファイルをロックするように設定する必要があります。 (set-group-IDをオンにし、group-executeをオフにする)に関連して[4]を参照。

Copyright © Windowsの知識 All Rights Reserved