Linuxの単一のオープンデバイス

アクセス制御を提供することは、ユーザーの柔軟性を制限するため。この技術は最高の回避されたプロセス(単一のオープン)を開くことを一度に1つのデバイスだけを許可するように強力な方法です。ユーザーがデバイス上で実行中の別のプロセスをすることができリードステータス情報および他の書き込みデータは、いくつかの例では、ユーザーがいる限り、彼らは同時にデバイスにアクセスできるように、シェルスクリプトで多くのことを行うためにいくつかの簡単な手順を実行します。つまり、単一のオープン動作を実現するためにあなたがユーザーの範囲に関与している可能性がので、実際に、戦略を作成します。

 

唯一可能にするデバイスを開くために、単一のプロセスは、望ましくない特性を有しているが、デバイスドライバへのアクセス制御を実現することも簡単であり、ここに示されている。これが呼び出さscullsingleにおけるソースデバイスから抽出されます。

 

scull_s_availableという変数atiomic_t scullsingle機器のメンテナンス;この変数が1の値に初期化されたデバイスが実際に利用可能なオープンコールデクリメントとテストscull_s_availableであり、他の人が開いたデバイスを持っている場合にアクセスを拒否することを示しています。

 

scull_s_available atomic_t静的= ATOMIC_INIT(1)。

静的int型scull_s_open(構造体のinode * iノード、構造体ファイル*の財投)

{

 

構造体scull_dev * DEV =&scull_s_device。/ *デバイス情報* / IF(!atomic_dec_and_test(&scull_s_available))

{

 

 

atomic_inc(&scull_s_available)。-EBUSYを返します。/ *すでにオープン* /

}

 

/ *それから、他のすべてが裸スカルデバイスからコピーされます* / IF((filp-> f_flags&O_ACCMODE)== O_WRONLY)

 

scull_trim(DEV)。filp-> PRIVATE_DATA = DEV; 0を返します。/* 成功 */

}

 

リリースコールは、他の一方で、識別装置は、もはや忙しいではありません。

 

静的int型scull_s_release(構造体のinode * iノード、構造体ファイル*の財投)

{

atomic_inc(&scull_s_available)。/ *デバイス* /リターン0をリリース。

}

 

通常、我々は概念的に、それはデバイスに属している、ので、あなたは、scul_s_availableは、デバイス構造(ここではscull_dev)にオープンする署名することをお勧めします。スカルドライバー、それが使用できるように、しかし、独立変数の使用は、このフラグを維持すると同じ装置構成及び方法、スカル空気、及びコードの重複の最小値。

おすすめ

転載: www.cnblogs.com/fanweisheng/p/11141902.html